【问题标题】:Getting the source ROI coordinates of a cv::Mat获取 cv::Mat 的源 ROI 坐标
【发布时间】:2014-03-25 19:15:00
【问题描述】:

在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 和 h 分别是原始图像的宽度和高度。

谢谢。

天哪

【问题讨论】:

  • 要知道一个子矩阵在原矩阵中的坐标,不能用 Mat::locateROI 函数吗? // 在父矩阵中定位矩阵头 void locateROI( Size& wholeSize, Point& ofs ) const;

标签: c++ opencv


【解决方案1】:

注意 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 也是如此

【讨论】:

  • 我想说这个答案比公认的要好得多。因为它提供了使用示例以及一些关于注意事项的指南。 +1
【解决方案2】:

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

// locates matrix header within a parent matrix
void locateROI( Size& wholeSize, Point& ofs ) const;

【讨论】:

    猜你喜欢
    • 2011-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-15
    • 2016-07-16
    • 2014-05-26
    • 1970-01-01
    相关资源
    最近更新 更多