获取cv :: Mat的源ROI坐标

Mer*_*ury 2 c++ opencv

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

cv::Mat img = cv::imread(fileName);
cv::Mat imgROI(img,cv::Rect(1,2,30,40));
Run Code Online (Sandbox Code Playgroud)

我的问题是如何在原始图像中提取原始ROI坐标,即一些预先形成以下内容的函数:

cv::Rect originalROIcoords  = roiLocationInOriginalImg(imgROI);
cv::Rect originalROIcoords2 = roiLocationInOriginalImg(img );
Run Code Online (Sandbox Code Playgroud)

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

谢谢.

小智 6

请注意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;
Run Code Online (Sandbox Code Playgroud)

获得第一次投资回报率的抵消:

imgROI.locateROI(wholesize,offset);
cout << "imgRoi Offset: " << offset.x <<","<< offset.y << endl;
Run Code Online (Sandbox Code Playgroud)

imgRoi Offset:10,10

获得ROI的roi偏移量:

roiROI.locateROI(wholesize,offset);
cout << "roiRoi Offset: " << offset.x <<","<< offset.y << endl;
Run Code Online (Sandbox Code Playgroud)

roiRoi Offset:15,15

同样是为了 wholesize

  • 我会说这个答案比公认的要好得多。因为它提供了使用示例以及一些注意事项的指南。+1 (3认同)