当前位置: 首页 > ai >正文

OpenCV CUDA模块图像处理------颜色空间处理之GPU 上对两张带有 Alpha 通道的图像进行合成操作函数alphaComp()

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

该函数用于在 GPU 上对两张带有 Alpha 通道的图像进行合成操作。支持多种常见的 Alpha 合成模式(Porter-Duff 合成规则),例如图像叠加、裁剪、异或等。

适用于图像叠加、视频抠像、UI 合成等场景,常用于游戏开发、图形渲染、视频特效等领域。

函数原型

void cv::cuda::alphaComp 	
(InputArray  	img1,InputArray  	img2,OutputArray  	dst,int  	alpha_op,Stream &  	stream = Stream::Null() 
) 	

参数

参数名描述
img1第一张图像。支持类型:CV_8UC4、CV_16UC4、CV_32SC4 和 CV_32FC4。
img2第二张图像。必须与 img1 具有相同的大小和相同的数据类型。
dst目标图像(输出结果)。
alpha_op指定 Alpha 混合操作的标志符,取值包括:
ALPHA_OVER
ALPHA_IN
ALPHA_OUT
ALPHA_ATOP
ALPHA_XOR
ALPHA_PLUS
ALPHA_OVER_PREMUL
ALPHA_IN_PREMUL
ALPHA_OUT_PREMUL
ALPHA_ATOP_PREMUL
ALPHA_XOR_PREMUL
ALPHA_PLUS_PREMUL
ALPHA_PREMUL
stream用于异步执行的 CUDA 流对象。

代码示例

#include <opencv2/cudaimgproc.hpp>
#include <opencv2/opencv.hpp>int main()
{// 加载两张 PNG 图像(带透明通道)cv::Mat img1 = cv::imread("/media/dingxin/data/study/OpenCV/sources/images/stich1.png", cv::IMREAD_UNCHANGED);cv::Mat img2 = cv::imread("/media/dingxin/data/study/OpenCV/sources/images/stich2.png", cv::IMREAD_UNCHANGED);if (img1.empty() || img2.empty()) {std::cerr << "无法加载图像!" << std::endl;return -1;}// 打印原始图像信息用于调试std::cout << "img1 size: " << img1.size() << ", type: " << img1.type() << std::endl;std::cout << "img2 size: " << img2.size() << ", type: " << img2.type() << std::endl;// 如果不是 BGRA 格式,则转换为 BGRA(四通道)cv::Mat img_bgra1 = (img1.channels() == 4) ? img1 : cv::Mat();cv::Mat img_bgra2 = (img2.channels() == 4) ? img2 : cv::Mat();if (!img_bgra1.data) cv::cvtColor(img1, img_bgra1, cv::COLOR_BGR2BGRA);if (!img_bgra2.data) cv::cvtColor(img2, img_bgra2, cv::COLOR_BGR2BGRA);// 确保图像尺寸一致if (img_bgra1.size() != img_bgra2.size()) {std::cerr << "图像尺寸不一致,正在调整 img2 到 img1 尺寸..." << std::endl;cv::resize(img_bgra2, img_bgra2, img_bgra1.size());}// 确保图像类型一致if (img_bgra1.type() != img_bgra2.type()) {std::cerr << "图像类型不一致,正在统一转换为 CV_8UC4..." << std::endl;img_bgra1.convertTo(img_bgra1, CV_8UC4);img_bgra2.convertTo(img_bgra2, CV_8UC4);}// 上传到 GPUcv::cuda::GpuMat d_img1, d_img2, d_dst;d_img1.upload(img_bgra1);d_img2.upload(img_bgra2);// 执行 Alpha 合成cv::cuda::alphaComp(d_img1, d_img2, d_dst, cv::cuda::ALPHA_OVER);// 下载结果并显示cv::Mat result;d_dst.download(result);cv::imshow("合成1",img1);cv::imshow("合成2",img2);cv::imshow("合成结果", result);cv::waitKey(0);return 0;
}

运行结果

在这里插入图片描述
在这里插入图片描述

http://www.xdnf.cn/news/9190.html

相关文章:

  • 【洛谷P9303题解】AC代码- [CCC 2023 J5] CCC Word Hunt
  • ubuntu22.04 安装 SecureCRT8.7.3
  • 没有经验能考OCP认证吗?
  • 视频逐帧提取图片的工具
  • 拆解汽车HMI设计:如何用3D可视化提升驾驶安全感?
  • RagFlow参数配置测试
  • 2025.5.27学习日记 linux三剑客 sed与正则表达式
  • 安卓开发用到的设计模式(3)行为型模式
  • Day31 -js应用 -实例:webpack jQuery的使用及其隐含的安全问题
  • C语言-指针
  • 目前可用随时更新,8种使用Claude4的方法!
  • 跨协议协同智造新实践:DeviceNet-EtherCAT网关驱动汽车焊接装配效能跃迁
  • word里面如何保存高清图片
  • idea 控制台 彩色打印日志
  • 主键与唯一键详解:概念、区别与面试要点
  • 【Bluedroid】init_stack_internal 函数全流程源码解析
  • Qt 多线程环境下的全局变量管理与密码安全
  • 电路图识图基础知识-主电路和辅助电路(七)
  • 华为FreeArc能和其他华为产品共用充电线吗?
  • C# 变量与常量完全指南:从基础到高级应用
  • 融智学“新五常”框架:五维方式的重构与协同
  • 十一、Samba文件共享服务
  • Nest全栈到失业(一):Nest基础知识扫盲
  • K8s入门(4)Kubernetes的技术演进
  • 2.1 Maven项目架构管理工具
  • Tomcat服务器
  • 误差反向传播法
  • 【Sqoop基础】Sqoop生态集成:与HDFS、Hive、HBase等组件的协同关系深度解析
  • CMake指令:file()
  • Pydantic 学习与使用