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

OpenCV – 图片增加透明通道,图片合并透明通道按理来说 使用 OpenCV 的 CUDA 版本进行计算相比 CPU 会快很多 但是经过我对上面 CPU 和 CUDA 版本的运行时间的测试 发现最终处理的时间是差不多的 我分析这个原因是在使用 CUDA 版本时 需要将

大家好,欢迎来到IT知识分享网。

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图片必须与原始图片具有相同的分辨率大小和相同的数据类型,比如原始图片是1920×1080,CV_8UC3的图片,那么Mask图片必须是1920×1080,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://haidsoft.com/141990.html

(0)
上一篇 2025-05-13 16:33
下一篇 2025-05-13 16:45

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信