2012-12-11 54 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