2012-12-11 50 views
2

的原始ROI坐标时,图像和图像的ROI之间没有区别。简历::垫目标可以是:在opencv中获取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分别是原始图像的宽度和高度。

谢谢。

+1

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

+0

@Esteban - 是的,谢谢! – Mercury

回答

2

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

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

要当心投资回报率的投资回报率,因为locateROI收益抵消相关的根图像和它的不相关的投资回报父母

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; 

得到偏移1日投资回报率:

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

imgRoi偏移:10,10

获得ROI投资回报率的偏差:

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

roiRoi偏移:15,15

同样是为wholesize

+1

我想说这个答案比接受的要好得多。因为它提供了使用示例以及关于需要注意的一些准则。 +1 – EdgeCaseBerg