VS+openCV 之 定义感兴趣区域

【准备工作】准备一个小图像和大图像。接下来要将小图像复制到大图像上。即定义一个感兴趣区域,在此处进行复制操作。

【实现】

定义ROI,把ROI当作一个普通的 cv::Mat 实例进行操作。

    cv::Mat image;
	image = cv::imread("1.jpg");
	cv::Mat logo;
	logo = cv::imread("ROI.jpg");
	//在图像右下角定义一个ROI
	cv::Mat imageROI(image,
		cv::Rect(image.cols - logo.cols, //ROI坐标
				 image.rows - logo.rows,
				 logo.cols, logo.rows));//ROI大小
	//插入标志
	logo.copyTo(imageROI);
	cv::namedWindow("ImageROI");
	cv::imshow("ImageROI", image);
	cv::waitKey(0);

【实现原理】

        使用 cv::Rect 确定左上角位置和矩形尺寸,描述一个矩形区域。

        还可以使用 cv::Range 来描述,即用行和列的值域描述,因此也可以使用以下代码定义ROI。

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

//要定义由图像中的一些行组成的 ROI,可用下面的代码:
cv::Mat imageROI= image.rowRange(start,end); 

//与之类似,要定义由图像中一些列组成的 ROI,可用下面的代码:
cv::Mat imageROI= image.colRange(start,end);

   【扩展阅读】

        可以利用图片掩码只复制标志中的白色部分。

    cv::Mat image;
	image = cv::imread("1.jpg");
	cv::Mat logo;
	logo = cv::imread("ROI.jpg");
	//在图像右下角定义一个ROI
	cv::Mat imageROI(image,
		cv::Rect(image.cols - logo.cols, //ROI坐标
				 image.rows - logo.rows,
				 logo.cols, logo.rows));//ROI大小
	//-------把标志作为掩码(必须是灰度图像)------
	cv::Mat mask(logo);
	//-------插入标志,只复制掩码不为0的位置-------
	logo.copyTo(imageROI,mask);
	cv::namedWindow("ImageROI");
	cv::imshow("ImageROI", image);
	cv::waitKey(0);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值