我無法在QImage中使用QRect正確轉換和/或顯示ROI,並從QImage中創建cv :: Mat圖像。 問題是對稱的,即我無法通過在cv :: Mat中使用cv :: Rect並從Mat創建QImage來正確獲取ROI。令人驚訝的是,每當cv :: Rect或QRect的寬度和高度相等時,一切正常。如何將從/到QImage的ROI轉換爲/從cv :: Mat?
在下面,我的全尺寸圖像是cv :: Mat matImage。這是CV_8U
類型的並具有2048×2048的
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);
下面的屏幕截圖說明了問題的正方形大小。 (左)全尺寸cv::Mat matImage
。 (中)從QImage
和QRect
(其大致對應於手繪的綠色矩形)的預期結果。 (右)在混亂的從cv::Mat matImageROI
我使用Qt 5.6和openCV 3.1,Mac OS X 10.10.5,Macbook Pro Retina。 –