Ich kann eine ROI mit einem QRect in einem QImage nicht richtig konvertieren und/oder anzeigen und ein cv :: Mat-Bild aus dem QImage erstellen. Das Problem ist symmetrisch, d. H. Ich kann den ROI nicht richtig erhalten, wenn ich cv :: Rect in einem cv :: Mat benutze und ein QImage aus dem Mat erzeuge. Überraschenderweise funktioniert alles gut, wenn die Breite und die Höhe des cv :: Rect oder des QRect gleich sind.Wie man ROI von/in QImage zu/von cv :: Mat konvertiert?
Im Folgenden ist mein Full-Size-Bild der cv :: Mat matImage. Es ist vom Typ CV_8U
und hat eine quadratische Größe von 2048x2048
int x = 614;
int y = 1156;
// buggy
int width = 234;
int height = 278;
//working
// int width = 400;
// int height = 400;
QRect ROI(x, y, width, height);
QImage imageInit(matImage.data, matImage.cols, matImage.rows, QImage::Format_Grayscale8);
QImage imageROI = imageInit.copy(ROI);
createNewImage(imageROI);
unsigned char* dataBuffer = imageROI.bits();
cv::Mat tempImage(cv::Size(imageROI.width(), imageROI.height()), CV_8UC1, dataBuffer, cv::Mat::AUTO_STEP);
cv::namedWindow("openCV imshow() from a cv::Mat image", cv::WINDOW_AUTOSIZE);
cv::imshow("openCV imshow() from a cv::Mat image", tempImage);
Der Screenshot unten zeigt das Problem.
(Links) Die Originalgröße
cv::Mat matImage
. (Mitte) das erwartete Ergebnis aus der QImage
und der QRect
(die in etwa entspricht das grüne Rechteck von Hand gezeichnet). (rechts) das verkorkste Ergebnis aus den cv::Mat matImageROI
Ich benutze Qt 5.6 und openCV 3.1, Mac OS X 10.10.5, Macbook Pro Retina. –