提取出图像中感兴趣的部分,cvSetImageRoi已经过时,更牛逼Rect解决问题

来源:互联网 发布:大数据前沿技术及应用 编辑:程序博客网 时间:2024/04/30 02:01
在做人脸检测的时候,需要从摄像头拍摄视频中把检测到的人脸区域提取出来,网上找了很多博客,发现多数都是在用cvSetImageRoi函数,该函数声明如下:void cvSetImageROI(IplImage* image, CvRect rect),可以看出,这个函数支持IplImage类,不能使用Mat,所以转换来转换去很麻烦,最后在国外网站(stack overflow)发现了一个用Rect    提取的方法。举个例子来说明:  Mat img=imread("D:\\1研究生\\Facial Expression Research\\表情识别\\Database\\Jaffe\\1.tiff",1);    Mat roi=img(Rect(0,0,30,30));//提取的关键就是Rect(0,0,30,30),其中0 ,0表示感兴趣区域的左上角位置,后面的30,30表示感兴趣部分的宽度和高度Mat img1;roi.copyTo(img1);//将感兴趣区域赋值到img1;namedWindow("gag",1);imshow("gag",img1);顺便说一下cvSetImageRoi的使用方法:基于给定的矩形设置图像的ROI(感兴趣区域,region of interesting)    并将它作为   一个独立图像进行处理,所有像素坐标都是从ROI的左上角或者左下角(基于图像结构)开始计算的。例如:SetImageROI(img1,cvRect(100,100,356,156)),(100,100)表示ROI区域的左上角坐标,356,156分别表示ROI区域的长宽。之后显示img1图像是只显示ROI标识的一部分,即改变了指针img1,但是它仍旧保留有原来图像的信息,在执行这一句cvResetImageROI(img1);
0 0