Gibt es eine reversible Möglichkeit, ein OpenCV cv::Mat
Objekt in ein Eigen::Matrix
Objekt zu konvertieren?OpenCV CV :: Mat und Eigen :: Matrix
zum Beispiel einen Weg zu tun:
cv::Mat cvMat;
Eigen::Matrix eigMat;
camera->retrieve(cvMat);
// magic to convert cvMat to eigMat
// work on eigMat
// convert eigMat back to cvMat
imshow("Image", cvMat);
Ich habe versucht, mit cv2eigen
und eigen2cv
, aber die resultierende cvMat
ist völlig verstümmelt und ich bin mir nicht ganz sicher, warum. Die Abmessungen sind korrekt, aber die Grafiken sind völlig zerstört, also möglicherweise ein Byte pro Pixel oder Datengröße Problem?
Perfekt, das ist ziemlich genau das wonach ich gesucht habe. Wenn Sie ein Mehrkanalbild (RGB, YUV oder eine andere Kombination von Kanälen) verwenden, wie würden Sie es am besten konvertieren? Eine separate Matrix pro Kanal? In eine 3D-Matrix von widthXheightXchannels? Oder erweitern Sie es einfach um Breite (Breite * 3) * Höhe? – Yeraze
Mulit-Channel-Bilder werden normalerweise als Interleaved-Arrays gespeichert (z. B. RGBRGBRGB ...).Abhängig davon, was Sie mit ihnen machen wollen, könnten Sie in Betracht ziehen, jeden einzelnen Kanal einer anderen Eigen :: Map zuzuweisen, die den Schrittparameter ausnutzt: 'cv :: Mat cvT (4,4, CV_32FC3); // eine 3-Kanal-Float-Matrix Eigen :: Map> rot (cvT.data); Eigen :: Map > grün (cvT.data +1); Eigen :: Map > blau (cvT.data +2); ' –
Pierluigi
Die Verwendung von cvT.data() funktioniert nicht für mich, gibt einen Compilerfehler. Ich habe eine Antwort darauf geschrieben, wie ich es unten mache, einschließlich Informationen, wie man es für beliebig große Matrizen macht und mit der umgekehrten Umwandlung von Eigen zu OpenCV. – Ela782