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

在做人脸检测的时候,需要从摄像头拍摄视频中把检测到的人脸区域提取出来,网上找了很多博客,发现多数都是在用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);
发布了49 篇原创文章 · 获赞 23 · 访问量 13万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览