雖然先前知道ROI區(qū)域是感興趣區(qū)域,但是真正看到調(diào)用了OpenCV的cvSetImageROI函數(shù)時(shí),并不知道它的作用,所以還是單獨(dú)寫(xiě)了一段代碼對(duì)這個(gè)函數(shù)進(jìn)行探究。
OpenCVchm文檔中對(duì)cvSetImageROI函數(shù)的介紹如下:
void cvSetImageROI( IplImage* image, CvRect rect );
image
圖像.
rect
ROI 矩形.
函數(shù) cvSetImageROI 基于給定的矩形設(shè)置圖像的 ROI(感興趣區(qū)域) . 如果ROI是NULL 并且參數(shù)RECT的值不等于整個(gè)圖像, ROI被分配. 不像 COI, 大多數(shù)的 OpenCV 函數(shù)支持 ROI 并且處理它就像它是一個(gè)分離的圖像 (例如, 所有的像素坐標(biāo)從ROI的左上角或左下角(基于圖像的結(jié)構(gòu))計(jì)算。
測(cè)試代碼:
#include<cv.h> #include<cxcore.h> #include<highgui.h> void main() { IplImage *res,*dst; CvRect rect; rect.x=130,rect.y=30,rect.width=200,rect.height=200; res=cvLoadImage("C:/Users/lufee/Pictures/cat.jpg");//載入一張圖片 dst=cvCreateImage(cvSize(200,200),8,3);//創(chuàng)建圖像空間 //創(chuàng)建窗口 cvNamedWindow("res",CV_WINDOW_AUTOSIZE); cvNamedWindow("dst",CV_WINDOW_AUTOSIZE); //設(shè)置ROI區(qū)域 cvSetImageROI(res,rect); //提取ROI cvCopy(res,dst); //取消設(shè)置 cvResetImageROI(res); //顯示圖像 cvShowImage("res",res); cvShowImage("dst",dst); cvWaitKey(0); cvDestroyWindow("res"); cvDestroyWindow("dst"); cvReleaseImage(&res); cvReleaseImage(&dst); }
運(yùn)行結(jié)果(res為原圖,dst為提取的ROI區(qū)域):
個(gè)人總結(jié):
在對(duì)某IplImage圖像用cvSetImageROI函數(shù)設(shè)置了ROI后,對(duì)圖像的處理都將僅限于ROI區(qū)域,相當(dāng)于該圖像變?yōu)榱薘OI中的圖像,測(cè)試代碼值僅用cvCopy(復(fù)制圖像的函數(shù)),進(jìn)行了測(cè)試,實(shí)際上對(duì)于任何處理圖像IplImage類(lèi)型的函數(shù),處理設(shè)置了ROI區(qū)域的圖像類(lèi)對(duì)象,都是處理它的ROI區(qū)域。