opencv基础03-感兴趣区域

#include<iostream>
#include<opencv2/core.hpp>
#include<opencv2/highgui.hpp>
#include<opencv2/imgproc.hpp>
using namespace std;
using namespace cv;
int main() {
	Mat image = imread("lena.jpg");
	Mat logo = imread("logo.jpg");
	Mat Roi_image(image, Rect(image.cols - logo.cols, image.rows - logo.rows, logo.cols, logo.rows));
	logo.copyTo(Roi_image);
	imshow("image", image);
	waitKey();
	return 0;
}

在这里插入图片描述
定义 ROI 的一种方法是使用 cv::Rect 实例。正如其名,它通过指明左上角的位置(构造函数的前两个参数)和矩形的尺寸(后两个参数表示宽度和高度),描述了一个矩形区域。在这个例子中,我们利用图像和标志的尺寸来确定标志的位置,即图像的右下角。很明显,整个 ROI肯定处于父图像的内部。
ROI 还可以用行和列的值域来描述。值域是一个从开始索引到结束索引的连续序列(不含开始值和结束值),可以用 cv::Range 结构来表示这个概念。因此,一个 ROI 可以用两个值域来定义。

imageROI= image(cv::Range(image.rows-logo.rows,image.rows),cv::Range(image.cols-logo.cols,image.cols));

使用图像掩码
OpenCV 中的有些操作可以用来定义掩码。函数或方法通常对图像中所有的像素进行操作,通过定义掩码可以限制这些函数或方法的作用范围。掩码是一个 8 位图像,如果掩码中某个位置的值不为 0,在这个位置上的操作就会起作用;如果掩码中某些像素位置的值为 0,那么对图像中相应位置的操作将不起作用。例如,在调用 copyTo 方法时就可以使用掩码,我们可以利用掩码只复制标志中白色的部分,如下所示
在这里插入图片描述

#include<iostream>
#include<opencv2/core.hpp>
#include<opencv2/highgui.hpp>
#include<opencv2/imgproc.hpp>
using namespace std;
using namespace cv;
extern void onMouse(int event, int x, int y, int flags, void* param);
int main() {
	Mat image = imread("lena.jpg");
	Mat logo = imread("logo.jpg");
	Mat logob = imread("logob.jpg");
	cout << logo.size() << endl;
	Mat Roi_image(image, Rect(image.cols - logo.cols, image.rows - logo.rows, logo.cols, logo.rows));
	Mat logoc = logo - logob;
	Mat mask(logoc);
	imshow("logoc",logoc);
	logo.copyTo(Roi_image,mask);
	imshow("image", image);
	imwrite("lenalogo.jpg",image);
	setMouseCallback("image", onMouse, reinterpret_cast<void*>(&image));

	waitKey();
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值