2

在opencv中,图像和图像的ROI之间没有区别。cv::Mat 对象可以是:

cv::Mat img = cv::imread(fileName);
cv::Mat imgROI(img,cv::Rect(1,2,30,40));

我的问题是如何提取原始图像中的原始 ROI 坐标,即执行以下操作的一些函数:

cv::Rect originalROIcoords  = roiLocationInOriginalImg(imgROI);
cv::Rect originalROIcoords2 = roiLocationInOriginalImg(img );

originalROIcoords应该是 (1,2,30,40),而originalROIcoords2应该是 (0,0,w,h),其中wh分别是原始图像的宽度和高度。

谢谢。

奥哈德

4

2 回答 2

9

小心 ROI 的 ROI,因为 locateROI 返回与根图像相关的偏移量,它与 ROI 父级无关

cv::Mat img(100,100,CV_8UC1);               // the root image
cv::Mat imgROI(img,cv::Rect(10,10,60,60));  // a ROI in the root image
cv::Mat roiROI(imgROI,cv::Rect(5,5,30,30)); // a ROI into a ROI

Point offset;
Size wholesize;

获取第一个 ROI 的偏移量:

imgROI.locateROI(wholesize,offset);
cout << "imgRoi Offset: " << offset.x <<","<< offset.y << endl;

imgRoi 偏移:10,10

获取 ROI 的 roi 偏移量:

roiROI.locateROI(wholesize,offset);
cout << "roiRoi Offset: " << offset.x <<","<< offset.y << endl;

roiRoi 偏移量:15,15

同样是为了wholesize

于 2014-03-25T11:15:00.393 回答
2

要知道原始矩阵中子矩阵的坐标,可以使用函数Mat::locateROI

// locates matrix header within a parent matrix
void locateROI( Size& wholeSize, Point& ofs ) const;
于 2012-12-11T10:24:04.677 回答