OpenCV - 图片增加透明通道,图片合并透明通道

这篇具有很好参考价值的文章主要介绍了OpenCV - 图片增加透明通道,图片合并透明通道。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 为图像增加透明通道

一般人像抠图相关的AI模型会输出一个Mask图,这个Mask图就是我们需要的可以将人物抠出来的Alpha通道信息,我们需要将这个Mask图附加到原始图片上,从BGR图片转成BGRA图片或者从RGB图片转成RGBA图片。

如果使用OpenCV进行图像处理,在为图像增加透明通道时会使用到cv::splitcv::merge方法,先使用cv::split方法分离原始图片各个通道,然后将Mask加入到原始通道中,最后使用cv::merge合成新的通道生成最后的图片。

示例代码如下

#include "opencv2/opencv.hpp"

cv::Mat MergeAlpha(const cv::Mat& src_image, const cv::Mat& alpha_image)
{
	std::vector<cv::Mat> channels;
	cv::split(src_image, channels);
	channels.push_back(alpha_image);
	cv::Mat src_alpha;
	cv::merge(channels, src_alpha);
	return src_alpha;
}

需要注意的是,Mask图片必须与原始图片具有相同的分辨率大小和相同的数据类型,比如原始图片是1920x1080,CV_8UC3的图片,那么Mask图片必须是1920x1080,CV_8UC1的图片。

如果你的OpenCV是编译了CUDA,还可以将上述代码修改成CUDA版本

cv::Mat MergeAlphaCUDA(const cv::Mat& src_image, const cv::Mat& alpha_image)
{
	cv::cuda::GpuMat src_image_gpu;
	src_image_gpu.upload(src_image);

	cv::cuda::GpuMat alpha_image_gpu;
	alpha_image_gpu.upload(alpha_image);

	std::vector<cv::cuda::GpuMat> channels;
	cv::cuda::split(src_image_gpu, channels);
	channels.push_back(alpha_image_gpu);
	cv::cuda::GpuMat src_alpha_gpu;
	cv::cuda::merge(channels, src_alpha_gpu);

	cv::Mat result;
	src_alpha_gpu.download(result);

	src_image_gpu.release();
	alpha_image_gpu.release();
	src_alpha_gpu.release();

	for (int i = 0; i < channels.size(); ++i)
	{
		channels[i].release();
	}

	return result;
}

按理来说,使用OpenCV的CUDA版本进行计算相比CPU会快很多,但是经过我对上面CPU和CUDA版本的运行时间的测试,发现最终处理的时间是差不多的,我分析这个原因是在使用CUDA版本时,需要将cpu上的图片使用upload方法从内存传递到显存中,计算完成还需要将最终的结果图片通过download方法从显存传递到内存中,如果图片比较大,这种HostToDevice和DeviceToHost是比较耗时的。

参考链接

  • https://answers.opencv.org/question/31136/fastest-way-to-apply-alpha-channel-to-image/

有兴趣可以访问我的个人站:https://www.stubbornhuang.com/文章来源地址https://www.toymoban.com/news/detail-568463.html

到了这里,关于OpenCV - 图片增加透明通道,图片合并透明通道的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • opencv+python(通道的分离与合并)笔记

    opencv+python(通道的分离与合并)笔记

    分割图像通道: 通过函数mv=split(img);mv返回的通道; RGB有3个通道;灰度图只有一个通道; 合并图像通道:cv2.merge((b,g,r)) 修改图像中某区域的颜色: img[10:100,10:100]=0 表示将图像img的行索引从10到100(不包括100)和列索引从10到100(不包括100)的区域像素值设置为0。这里的1

    2024年04月10日
    浏览(7)
  • OpenCV4通道的分离split(),通道的合并merge(),通道的混合mixChannels()

    OpenCV4通道的分离split(),通道的合并merge(),通道的混合mixChannels()

    opencv中默认imread函数加载图像文件,加载进来的是三通道彩色图像,色彩空间是RGB色彩空间,通道顺序是BGR(蓝色、绿色、红色),对于三通道的图像OpenCV中提供了三个API函数用以实现通道分离split(),合并merge(),混合mixChannels(); RGB图像,在opencv的Mat中,像素数据,存储结构

    2024年02月12日
    浏览(13)
  • OpenCV for Python 学习第四天 :通道的获取与合并

    OpenCV for Python 学习第四天 :通道的获取与合并

    上一篇博客,我们学习了如何通过更快的item()和itemset()的方法访问图片,以及了解了图像的兴趣位置的获取方法,那么今天,我们将学习通道的处理方法,通过通道的拆分和合并的实例,让大家更好的了解咱们有关于BGR通道的知识。 在OpenCV中,可以使用split()方法将图像的不

    2024年02月17日
    浏览(11)
  • OpenCV在一张图片上以不同的透明度添加另一张图片
  • OpenCV 将单通道转换为三通道

    项目有个需求:图片传至图像算法库处理完成后需要返回结果图像进行再加工。 目前的情况是相机拍下来的图像是灰度图 传送图像指针给算法处理,算法处理完后将检测结果(eg. ok,ng)写入一张三通道图,只有这样才可以显示彩色文字 然后现在需要回传此三通道图片的指针

    2024年02月11日
    浏览(8)
  • 02 OpenCV图像通道处理

    02 OpenCV图像通道处理

    在数字图像处理中,图像通道是指一个图像中的颜色信息被分离为不同的颜色分量。常见的图像通道包括RGB通道、灰度通道、HSV通道等。 RGB通道是指将图像分离为红色、绿色和蓝色三个颜色通道,每个通道表示相应颜色的亮度。这种方式是最常见的方式,它对于彩色图像的处

    2024年02月12日
    浏览(12)
  • 消防通道堵塞识别 opencv

    消防通道堵塞识别 opencv

    消防通道堵塞识别系统通过opencv+python网络模型技术,消防通道堵塞识别对消防通道的状态进行实时监测,检测到消防通道被堵塞时,将自动发出警报提示相关人员及时采取措施。OpenCV的全称是Open Source Computer Vision Library,是一个跨平台的计算机视觉处理开源软件库,是由Int

    2024年02月16日
    浏览(12)
  • opencv 基础学习08-图像通道操作

    opencv 基础学习08-图像通道操作

    OpenCV的通道拆分功能可用于将多通道图像拆分成单独的通道,这在图像处理和计算机视觉任务中具有许多应用场景。以下是一些通道拆分的常见应用场景: 图像处理 :在某些图像处理任务中,需要对图像的不同通道进行独立处理。例如,可以对彩色图像的RGB通道进行分别处

    2024年02月16日
    浏览(16)
  • Python使用OpenCV库对彩色图像进行通道分离

    目录 1、解释说明: 2、使用示例: 3、注意事项: 在Python中,我们可以使用OpenCV库对彩色图像进行通道分离。通道分离是将彩色图像的每个像素分解为三个通道(红、绿、蓝)的过程。这样,我们可以分别处理和分析每个通道的信息。通道分离在图像处理中有很多应用,例如

    2024年02月12日
    浏览(15)
  • OpenCV增加图像的亮度及对比度

    OpenCV增加图像的亮度及对比度

    案例:输出一张原图,增加该图片的亮度及对比度 基本概念: 亮度:RGB的像素值范围是0~255,我们称从0——255随着像素值的增加图像会越来月亮,反之会越来越暗。所以我们可以通过对图像像素加减来改变图像的亮度。 对比度:其反应的是图像中各像素的差异(层次感、落

    2024年02月12日
    浏览(12)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包