感兴趣区域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);掩码的范围作了相加操作