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

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenCV中的ROI(Region of Interest)指的是在像中选择感兴趣区域进行操作。在OpenCV中,可以使用不同的方法来实现ROI的提取。 方法1: 使用矩形ROI区域提取。可以通过创建一个矩形区域的对象来指定ROI的位置和大小,然后将该矩形区域应用于源像,最后得到提取的ROI区域像。 方法2: 使用轮廓(contour)来指定ROI区域。可以通过定义一个包含多个点的轮廓对象来描述ROI的形状,然后使用drawContours函数将该轮廓应用于掩码像,最后用掩码像对源像进行掩码运算,从而提取ROI区域像。 方法3: 根据ROI的坐标直接从原图中提取。可以使用矩形的坐标参数来直接指定ROI的位置和大小,然后使用setTo函数将指定区域设置为白色,最后使用掩码运算将ROI区域从源像中提取出来。 以下是使用OpenCV实现ROI提取的示例代码: 方法1: ```cpp Mat src, dst; Rect roiRect(80, 80, 200, 200); // 创建矩形ROI区域 src = imread("D:/opencv练习片/薛之谦.jpg"); dst = src(roiRect); // 提取ROI区域 imshow("ROI区域", dst); waitKey(0); ``` 方法2: ```cpp Mat src, dst, ROI; src = imread("D:/opencv练习片/薛之谦.jpg"); ROI = Mat::zeros(src.size(), CV_8UC1); // 创建掩码像 vector<vector<Point>> contours; // 轮廓 vector<Point> pts; // 多边形角点集合 pts.push_back(Point(30, 45)); pts.push_back(Point(100, 15)); pts.push_back(Point(200,145)); pts.push_back(Point(300, 240)); pts.push_back(Point(50, 250)); contours.push_back(pts); drawContours(ROI, contours, 0, Scalar(255), -1); // 用白色填充多边形区域 src.copyTo(dst, ROI); // 掩码运算 imshow("ROI区域", dst); imshow("掩码", ROI); waitKey(0); ``` 方法3: ```cpp Mat src, dst, mask; Rect roiRect(80, 80, 200, 200); // 创建矩形ROI区域 src = imread("D:/opencv练习片/薛之谦.jpg"); mask = Mat::zeros(src.size(), CV_8UC1); // 创建纯黑色二值像 mask(roiRect).setTo(255); // 构建掩膜,将矩形ROI区域涂白 src.copyTo(dst, mask); // 掩膜运算 imshow("ROI区域", dst); imshow("掩膜", mask); waitKey(0); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值