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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章