opencv7-ROI

来源:互联网 发布:注音输入法 简体 mac 编辑:程序博客网 时间:2024/05/16 01:15

图像感兴趣区域有两种表现的形式,一种是直接在感兴趣处的点上加上变化;另外一种是将感兴趣处那点的像素改为想改变的。

就比如两张图像的融合-

一种做法是两张图片直接相加,但是会出现像素饱和,效果可能不好。

Mat imageROI;
imageROI(Rect(240,300,logo.cols,logo.rows));

addWeighted(imageROI,1.0,logo,0.3,0.,imageROI;)

另一种做法是在确定好插入的点后,将此点处的像素直接改为小图像的像素,而这种大多是通过掩码mask完成的。

imageROI(Rect(240,300,logo.cols,logo.rows));Mat mask=imread("logo.bmp",0);logo.copyTo(imageROI,mask);
掩码是8位单通道图像,可以用来提取不规则的图形。
Rect 表示矩形区域,指定矩形的左上角坐标和矩形长宽就可以了。

另一种定义的方式是使用Range,指定感兴趣行或列的范围。

imageROI=image(Range(240,240+logo.rows),range(300,300+logo.cols));

#include<opencv.hpp>#include<opencv2/highgui/highgui.hpp>#include<opencv2/imgproc/imgproc.hpp>#include<iostream>using namespace cv;int main(){Mat img=imread("E:\\Baboon.jpg");Rect rect1(270,270,128,128);//Rect rect2(224,224,128,128);Mat result1;img(rect1).copyTo(result1);//imshow("result1",result1);//waitKey(0);/*Mat result2;img(rect2).copyTo(result2);imshow("result2",result2);waitKey(0);*//*Rect rect3=rect1&rect2;Mat result3;img(rect3).copyTo(result3);imshow("result3",result3);waitKey(0);*//*Rect rect4=rect1|rect2;Mat result4;img(rect4).copyTo(result4);imshow("result4",result4);waitKey(0);*/Rect rect5(10,10,128,128);result1.copyTo(img(rect5));imshow("result5",img);waitKey(0);return 0;

实验结果



原创粉丝点击