取图像局部保存成一个图像,或者将图像局部和另一个图像互换应用比较广。
主要用到的函数是rect
1.取图像局部保存
Rect rectL(0, 0, 15,20);
Mat img_now = img(rectL);
取图像img的左上角,宽15像素,高20像素的图像,生成新图像img_now
Rect的定义
Rect_(_Tp _x, _Tp _y, _Tp _width, _Tp _height);
2.图像局部互换
声明一下,我的方法不是最优方法,但是能用
我们想把一副图像的中间部位保留,其他部位变成0,也就是无数据(和局部互换思想一致)
1.生成一个和原图像大小一致的纯黑色矩阵
Mat CCL = Image.clone();
Mat CC = CCL.clone() * 0;
这里用了.clone(),为得不让CCL变,影响到image,如果直接CCL = image会造成CCL指向image的地址,对CCL操作将会影响image。
2.将Mat格式图像转换为IplImage*的形式,便于ROI操作
IplImage* ipl_imgL;
ipl_imgL = &CCL.operator IplImage();
IplImage* ipl_imgC;
ipl_imgC = &CC.operator IplImage();
3.构建rect框
Rect roi = Rect(0, round(CCL.rows / 4), CCL.cols, round(CCL.rows / 2));
Rect roi1 = Rect(0, round(CCL.rows / 4), CCL.cols, round(CCL.rows / 2));
4.设置ROI
cvSetImageROI(ipl_imgL, roi);
cvSetImageROI(ipl_imgC, roi1);
5.将设置好ROI的图像拷贝操作并重设
cvCopy(ipl_imgL, ipl_imgC);
cvResetImageROI(ipl_imgC);
6.将IplImage*转换会Mat
Mat src_color1(ipl_imgC);
src_color = src_color1.clone();
ROI Region Of Interest的缩写,图像处理中的术语“感兴趣区”。设置图像的ROI便是设置要处理的图像中需要提取的区域。
IplImage*为opencv2.1之前使用的图像表达结果,Mat为之后改版的结构,这里二郎并不清楚ROI为什么在直接操作Mat时会出现问题,希望懂的学者可以在下方留言赐教,谢谢。