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图像融合
初级融合
高级融合
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);掩码的范围作了相加操作
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);掩码的范围作了相加操作
相关文章推荐
- 设置图像的感兴趣区域(ROI)
- OPENCV图像处理基础(二)感兴趣区域ROI
- OpenCV对感兴趣区域(ROI)的操作
- Matlab图像处理学习笔记(一):二值化、开操作、连通区域提取、重心、ROI
- Matlab图像处理(一):二值化、开操作、连通区域提取、重心,ROI(region of interest)
- opencv开发笔记(八):利用感兴趣区域ROI实现图像叠加
- opencv:感兴趣区域的操作:ROI
- roi取一感兴趣的区域,显示另一幅图像
- 【OpenCV】通过ROI区域以及掩码实现图像叠加
- 基于opencv的感兴趣区域ROI的操作
- c# opencvsharp学习笔记(3)兴趣区域ROI,图像叠加,操作像素点
- OpenCV对感兴趣区域(ROI)的操作
- 设置图像的感兴趣区域(ROI)
- ROI区域图像操作
- OpenCV:设置图像的感兴趣区域(ROI)
- 【OpenCV】通过ROI区域以及掩码实现图像叠加
- 设置图像的感兴趣区域(ROI)
- Matlab图像处理学习笔记(一):二值化、开操作、连通区域提取、重心、ROI
- 学习openCV之读取图像和感兴趣区域融合
- Matlab图像处理学习笔记(一):二值化、开操作、连通区域提取、重心、ROI