您的位置:首页 > 运维架构

opencv ROI(感兴趣区域)与掩码操作 ROI图像融合

2017-06-08 22:33 861 查看
感兴趣区域ROI

1)ROI介绍

**ROI–感兴趣的区域

**一般为矩形区域

**能够定义分析重点,减少处理时间,增减精度

**定义方法:

使用Rect表示矩形区域或者用Range设定行列范围

ex1:

Mat img=imread(“1.jpg”);

Mat temp=imread(“logo.bmp”);

Mat imgageROI=img(Rect(20,20,temp.cols,temp.rows));//x,y,w,h

ex2:

Mat img=imread(“1.jpg”);

Mat temp=imread(“logo.bmp”);

Mat imgageROI=img(Range(20,20+temp.rows),Range(20,20+temp.cols));

imwrite(“ROI.bmp”,imageROI);//保存ROI

2)ROI图像融合

初级融合

//初级融合
Mat img=imread("1.jpg");
Mat img=imread("opencv.jpg");
Mat imgROI=img(Rect(20,20,logo.cols,logo.rows));
logo.copyTo(imgROI);
imshow("ROI",imgROI);


高级融合

4)mask—掩码/掩膜操作

mask-(掩码)是一个8位单通道图像(灰度图/二值图**)

**掩码某个位置如果是0,则在此位置上不起作用

**掩码某个位置如果不为0,则在此位置上的操作会起作用

**可以用来提取不规则ROI

只有maskImage为1 矩阵点才不会变,其余的都会为0

mask 一般是和原图一样大小的图来做 是黑白图

在画图工具里黑 找出ROI区域 白色

纯黑色的不会起作用

Mat img=imread(“1.jpg”);

Mat logo=imread(“lena.jpg”);

Mat mask=imread(“mask.jpg”,0);

Mat imgROI=img(Rect(20,20,logo.cols,logo.rows));

logo.copyTo(imgROI,mask);

上述方法是画图软件实现

下面自己来创建一张图

Mat img=imread(“1.jpg”);

Mat logo=imread(“lena.jpg”);

Mat mask=Mat::zero(logo.size(),CV_8UC1);//创建一个纯黑图像

circle(mask,Point(mask.row/2,mask.cols/2),100,Scalar(255),-1,8);//一个填充的白圆

Mat imgROI=img(Rect(20,20,logo.cols,logo.rows));

logo.copyTo(imgROI,mask);

用本身的灰度图像做mask ,白色比较多

取反白色就没有了

然后看mask是什么样子

然后对mask做二值化

threshold(mask,mask,200,255,THRESH_BINARY);//二值化

图像基本运算+的最后一个参数就是掩码

Mat img1=imread(“1.jpg”);

Mat img2=iread(“2.jpg”);

Mat mask=Mat::zero(img.size(),CV_8UC1);

circle(mask,Point(mask.cols/2,mask.rows/2),100,Scalar(100),-1,8);

Mat dst=img2.clone();

add(img1,im2,dst,mask);掩码的范围作了相加操作
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: