【OpenCV3】如何给图像添加(不)透明度通道

本文介绍了如何使用OpenCV3为原本没有透明度通道的图像添加透明度,通过创建四通道图像实现这一功能。透明度(Alpha通道)与图像的不透明度相关,取值范围在0(完全透明)到255(完全不透明)。文中提供了一个简单的函数示例,并展示了如何根据灰度值设定透明度。测试代码中,灰度值越高,图像越透明。最终,保存带有透明度的图像通常选择png格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

透明度通道,又叫alpha通道,做用于记录图像的透明度信息。具体参照【百度百科】“alpha通道”中的介绍。透明度确切的说应该叫不透明度(Opacity),取最小值0时,表示完全透明;取最大值255时,表示完全不透明;取值越大表示越不透明。通常遇到的图像如bmp图像、jpg图像都是单通道(灰度图)、RGB三通道(彩色)图像,而没有透明度通道,那么如何使用opencv给没有透明度通道的图像添加透明度,形成具有透明度通道(四通道)的图像呢。

这里封装了一个简单的函数,如下:

int addAlpha(cv::Mat& src, cv::Mat& dst, cv::Mat& alpha)
{
	if (src.channels() == 4)
	{
		return -1;
	}
	else if (src.channels() == 1)
	{
		cv::cvtColor(src, src, cv::COLOR_GRAY2RGB);
	}
	
	dst = cv::Mat(src.rows, src.cols, CV_8UC4);

	std::vector<cv::Mat> srcChannels;
	std::vector<cv::Mat> dstChannels;
	//分离通道
	cv::split(src, srcChannels);

	dstChannels.push_back(srcChannels[0]);
	dstChannels.push_back(srcChannels[1]);
	dstChannels.push_back(srcChannels[2]);
	//添加透明度通道
	dstChannels.push_back(alpha);
	//合并通道
	cv::merge(dstChannels, dst);

	return 0;
}

另一个问题就是如何生成透明度

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值