我无法在 QImage 中使用 QRect 正确转换和/或显示 ROI,并从 QImage 中创建 cv::Mat 图像。问题是对称的,即我无法通过在 cv::Mat 中使用 cv::Rect 并从 Mat 中创建 QImage 来正确获得 ROI。令人惊讶的是,只要 cv::Rect 或 QRect 的宽度和高度相等,一切都会正常工作。
接下来,我的全尺寸图像是 cv::Mat matImage。它是类型CV_8U
,正方形大小为 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);
下面的屏幕截图说明了这个问题。
(左)全尺寸
cv::Mat matImage
。QImage
(中)和的预期结果QRect
(大致对应于手工绘制的绿色矩形)。(右)混乱的结果cv::Mat matImageROI