Czy istnieje odwracalny sposób przekonwertowania obiektu OpenCV cv::Mat
na obiekt Eigen::Matrix
?OpenCV CV :: Mat i Eigen :: Matrix
np Niektóre ze sposobów:
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);
Próbowałem za pomocą cv2eigen
i eigen2cv
, ale wynikający cvMat
jest całkowicie zniekształcone i nie jestem do końca pewien dlaczego. Wymiary są poprawne, ale grafika jest całkowicie zniszczona, a więc prawdopodobnie w bajtach na piksel lub problem z datasize?
Doskonały, dokładnie to, czego szukałem. Jeśli korzystasz z obrazu wielokanałowego (RGB, YUV lub jakiejkolwiek innej kombinacji kanałów), jak najlepiej go przekonwertować? Oddzielna matryca na kanał? Do matrycy 3D szerokości XheightXchannels? Lub po prostu rozszerzyć go o szerokość (szerokość * 3) * wysokość? – Yeraze
Obrazy wielokanałowe są zwykle przechowywane jako tablice z przeplotem (np. RGBRGBRGB ...).W zależności od tego, co chcesz z nimi zrobić, możesz rozważyć mapowanie każdego kanału na inny Eigen :: Map wykorzystujący parametr kroku: 'cv :: Mat cvT (4,4, CV_32FC3); // 3-kanałowa macierz float Eigen :: Mapa> czerwona (cvT.data); Eigen :: Mapa > zielona (cvT.data +1); Eigen :: Mapa > niebieski (cvT.data +2); ' –
Pierluigi
Używanie cvT.data() nie działa dla mnie, powoduje błąd kompilatora. Opublikowalem odpowiedzi na temat tego, jak to zrobilam ponizej, w tym informacje jak to zrobic dla macierzy o dowolnych rozmiarach iz odwrotna konwersja z Eigen do OpenCV. – Ela782