2013-12-08 87 views
0
cvSetImageROI(dst, cvRect(0, 0,img1->width,img1->height)); 
cvCopy(img1,dst,NULL); 
cvResetImageROI(dst); 

的我使用這些命令來設置圖像的ROI,但現在I M使用MAT對象和這些功能只需要IplImage結構作爲參數。 Mat對象有沒有類似的命令? 感謝您的任何幫助setImageROI使用MAT圖像代替的IplImage

回答

5

可以使用cv::Mat::operator()去選定的圖像ROI的參考。

考慮下面的例子,您想要執行按位NOT在特定圖像ROI上的操作。你會做這樣的事情:

img = imread("image.jpg", CV_LOAD_IMAGE_COLOR); 

int x = 20, y = 20, width = 50, height = 50; 

cv::Rect roi_rect(x,y,width,height); 

cv::Mat roi = img(roi_rect); 

/* ROI data pointer points to a location in the same memory as img. i.e. 
No separate memory is created for roi data */ 

cv::Mat complement; 
cv::bitwise_not(roi,complement); 
complement.copyTo(roi); 

cv::imshow("Image",img); 
cv::waitKey(); 

您提供可以做如下的例子:

cv::Mat roi = dst(cv::Rect(0, 0,img1.cols,img1.rows)); 
img1.copyTo(roi); 
+0

BTW這將是更好寫'CV ::矩形roi_rect = CV ::矩形(X ,y,width,height);'只要'cv :: Rect roi_rect(x,y,width,height);' – Bull

2

是的,你有幾個選項,請參閱docs

最簡單的方法通常是使用CV ::矩形到specifiy投資回報率:

cv::Mat img1(...); 
cv::Mat dst(...); 
... 
cv::Rect roi(0, 0, img1.cols, img1.rows); 
img1.copyTo(dst(roi));