OpenCV:ROI区域透明处理

 

实现步骤:

1、获取原始图像1的ROI区域,ROI区域与原始图像2大小相同;

2、将两张大小和通道数相同的图像(ROI和原始图像2)进行加权,加权后图像为透明状;

3、将加权后的图像转换为灰度图作为掩模;

4、将加权后的透明图像和掩模进行处理,然后拷贝到原始图像的ROI区域上。

示例代码: 

#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>

#define WINDOW_NAME "主窗口"

int main()
{
	cv::Mat dstImage, grayImage, maskImage;
	//图像文件名称
	const std::string fileName = "琴女.jpg";
	
	//两图像的权值
	double alphaValue = 0.3;
	double betaValue = 1 - alphaValue;

	//创建一张粉色图像
	cv::Mat pinkImage = cv::Mat(200, 250, CV_8UC3, cv::Scalar(230, 130, 255));
	cv::imshow("pinkImage", pinkImage);

	//创建窗口
	cv::namedWindow(WINDOW_NAME,cv::WINDOW_AUTOSIZE);
	//加载图像
	cv::Mat srcImage = cv::imread(fileName,1);
	//判断是否加载成功
	if (srcImage.empty())
	{
		std::cout << "load image failed !";
		return -1;
	}
	
	//获取ROI图像
	cv::Mat roiImage = srcImage(cv::Rect(50,50, pinkImage.cols,pinkImage.rows));
	cv::imshow("roiImage", roiImage);
	
	//加权处理
	cv::addWeighted(pinkImage, alphaValue, roiImage, betaValue, 0.0, dstImage);
	cv::imshow("dstImage", dstImage);
	
	//转换为灰度图
	cv::cvtColor(dstImage, grayImage,CV_BGR2GRAY);
	
	//掩模
	maskImage = grayImage.clone();
	
	//将dstImage和maskImage处理后拷贝给roiImage
	dstImage.copyTo(roiImage, maskImage);
	
	cv::imshow(WINDOW_NAME, srcImage);
	cv::waitKey();
	//销毁所有窗口
	cv::destroyAllWindows();
	return 0;
}

显示结果:

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值