在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),其中 w < / em>和 h 分别是原始图像的宽度和高度。
感谢。
辖
答案 0 :(得分:6)
小心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;
获得第一次投资回报率的偏移:
imgROI.locateROI(wholesize,offset);
cout << "imgRoi Offset: " << offset.x <<","<< offset.y << endl;
imgRoi Offset:10,10
获得ROI的roi偏移量:
roiROI.locateROI(wholesize,offset);
cout << "roiRoi Offset: " << offset.x <<","<< offset.y << endl;
roiRoi Offset:15,15
同样适用于wholesize
答案 1 :(得分:2)
要知道原始矩阵中子矩阵的坐标,可以使用函数Mat::locateROI
// locates matrix header within a parent matrix
void locateROI( Size& wholeSize, Point& ofs ) const;