opencv取图像一部分,取图像局部,图像局部互换

取图像局部保存成一个图像,或者将图像局部和另一个图像互换应用比较广。

主要用到的函数是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时会出现问题,希望懂的学者可以在下方留言赐教,谢谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值