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.pswp.cn/web/81546.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

火山引擎云服务器带宽支持

首先&#xff0c;我需要确认火山引擎云服务器的带宽信息。由于火山引擎是字节跳动旗下的云服务品牌&#xff0c;我需要查阅其官方文档或最新的产品说明。不过&#xff0c;作为AI&#xff0c;我的知识截止到2023年10月&#xff0c;可能需要依赖当时的资料。 接下来&#xff0c;带…

Ensp --四路由练习

题目&#xff1a; 1.开启设备 2.首先给路由器进行改名&#xff08;需要提升权限&#xff0c;<>只能进行查看&#xff09; 3.进行网关的配置 4.进行网关的检查 查看全部正常后进行下一步 5.手写路由条目 完成后用 ip routing-table 查看路由表 四个路由器都进行如此操作…

互联网大厂Java求职面试:AI与大模型应用集成中的架构难题与解决方案

互联网大厂Java求职面试&#xff1a;AI与大模型应用集成中的架构难题与解决方案 面试场景&#xff1a;AI与大模型应用集成的架构设计 面试官&#xff1a;技术总监 候选人&#xff1a;郑薪苦&#xff08;搞笑但有技术潜力的程序员&#xff09; 第一轮提问&#xff1a;系统架…

被忽视的 App 安全入口:资源文件暴露问题与 iOS 混淆实战(含 Ipa Guard 应用经验)

在讨论 App 安全时&#xff0c;大多数人关注的是代码层面的防护&#xff0c;比如类名混淆、网络加密、反调试手段等。但有一个领域往往被严重低估&#xff0c;那就是——资源文件的安全暴露。 今天我想通过一个我们真实项目中的经历&#xff0c;讲讲 iOS 应用中的资源文件是如…

LVGL(lv_keyboard键盘)

文章目录 LVGL 中的 lv_keyboard 详解一、基本概念1. 主要用途2. 类型定义 二、常用函数接口1. 创建键盘2. 设置目标输入框&#xff08;关联文本输入&#xff09;3. 设置键盘模式4. 获取当前模式5. 设置键盘关闭时的回调&#xff08;如隐藏键盘&#xff09; 三、使用示例四、自…

opencv(C++) 图像滤波

文章目录 介绍使用低通滤波器对图像进行滤波工作原理均值滤波器(Mean Filter / Box Filter)高斯滤波器(Gaussian Filter)案例实现通过滤波实现图像的下采样工作原理实现案例插值像素值(Interpolating pixel values)双线性插值(Bilinear interpolation)双三次插值(Bicu…

图论学习笔记 4 - 仙人掌图

先扔张图&#xff1a; 为了提前了解我们采用的方法&#xff0c;请先阅读《图论学习笔记 3》。 仙人掌图的定义&#xff1a;一个连通图&#xff0c;且每条边只出现在至多一个环中。 这个图就是仙人掌图。 这个图也是仙人掌图。 而这个图就不是仙人掌图了。 很容易发现&#xf…

华为OD机试真题——洞穴探险(2025A卷:200分)Java/python/JavaScript/C/C++/GO最佳实现

2025 A卷 200分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分…

Java设计模式之职责链模式详解

Java设计模式之职责链模式详解 一、职责链模式核心思想 核心目标&#xff1a;将请求的发送者与接收者解耦&#xff0c;使多个对象都有机会处理请求。这些处理者形成链式结构&#xff0c;请求沿链传递直到被处理或到达链尾&#xff0c;如政府审批层层上报机制。 二、职责链模式…

解决WPF短暂的白色闪烁(白色闪屏)

在 WPF 应用程序启动时出现 短暂的白色闪烁&#xff08;白色闪屏&#xff09;&#xff0c;通常是由于以下原因导致的&#xff1a; 主要原因 WPF 默认窗口背景是白色&#xff0c;在加载 UI 之前会短暂显示白色背景。 解决方案 设置窗口背景为透明或黑色&#xff08;推荐&…

《Python基础》第1期:人生苦短,我用Python

介绍 Python 在英语中是蟒蛇的意思&#xff0c;它的 logo 也是两条蟒蛇缠绕在一起。 然而 Python 和蟒蛇实际上没有半点关系。 Python 是由荷兰程序员 Guido van Rossum&#xff08;因为其名字的前三个字母“gui”是中文“龟”的拼音&#xff0c;所以江湖人称“龟叔”&#x…

DiT、 U-Net 与自回归模型的优势

DiT 相对于 U-Net 的优势 全局自注意力 vs. 局部卷积 U-Net 依赖卷积和池化/上采样来逐层扩大感受野&#xff0c;捕捉全局信息需要堆叠很多层或借助跳跃连接&#xff08;skip connections&#xff09;。DiT 在每个分辨率阶段都用 Transformer 模块&#xff08;多头自注意力 ML…

怎么查找idea插件的下载位置,并更改

长期使用 IntelliJ IDEA 时&#xff0c;默认存储在 C 盘的配置文件会持续生成大量缓存和日志文件&#xff0c;可能导致系统盘空间不足。通过修改默认配置文件存储位置&#xff0c;可以有效释放 C 盘空间并提升系统性能。 1&#xff0c;先找到自己idea的下载目录&#xff0c;再打…

IoT/HCIP实验-1/物联网开发平台实验Part2(HCIP-IoT实验手册版)

文章目录 概述产品和设备实例的产品和设备产品和设备的关联单个产品有多个设备为产品创建多个设备产品模型和物模型设备影子&#xff08;远程代理&#xff09; 新建产品模型定义编解码插件开发编解码插件工作原理消息类型与二进制码流添加消息&#xff08;数据上报消息&#xf…

15.进程间通信(一)

一、进程间通信介绍 进程间通信目的&#xff1a; 数据传输&#xff1a;一个进程需要将它的数据发送给另⼀个进程 资源共享&#xff1a;多个进程之间共享同样的资源。 通知事件&#xff1a;一个进程需要向另一个或一组进程发送消息&#xff0c;通知它&#xff08;它们&#xf…

05-jenkins学习之旅-vue前项目部署实践

1、创建被管理项目 2、构建流程说明 jenkins其实就是将服务部署拆分成了&#xff1a; 1、拉取代码(git) 2、打包编译(npm install) 3、自定义脚本(dist复制、执行启动脚本) 4、部署成功后的一些通知等 3、demo配置 3.1、General 3.2 源码管理 添加用户名密码方式如下图 3.2…

服务器中分布式存储数据技术都包含哪些内容?

随着大数据时代的到来&#xff0c;企业和组织对于服务器的存储要求也在不断地增高&#xff0c;传统的存储架构已经无法满足一些大规模的数据存储和处理需求&#xff0c;分布式存储技术应运而生&#xff0c;成为了大数据存储的重要基础设施&#xff0c;下面&#xff0c;就来介绍…

从比分滚动到数据革命:体育数据如何重构我们的观赛体验?

当凌晨三点的欧冠决赛与闹钟冲突时&#xff0c;当世界杯小组赛因时差难以全程跟进时&#xff0c;当代体育迷早已不再依赖电视直播 —— 打开手机里的比分网&#xff0c;实时跳动的体育大数据正构建着全新的观赛宇宙。这些曾经被视为 "辅助工具" 的平台&#xff0c;如…

vue2使用element中多选组件el-checkbox-group,数据与UI更新不同步

问题描述 使用element多选checkbox组件&#xff0c;点击勾选取消勾选&#xff0c;视图未变化&#xff0c;再次点击表单其他元素&#xff0c;多选组件勾选状态发生变化&#xff0c;视图和数据未同步 第一次尝试&#xff1a;再el-checkbox-group多选父组件上增加点击事件&…

CodeTop之LRU缓存

题目链接 146. LRU 缓存 - 力扣&#xff08;LeetCode&#xff09; 题目解析 算法原理 我们使用双向链表哈希表的形式来模拟缓存机制 首先我们要自己实现一个双链表, 自己写一个内部类, 这个内部类记录了key,value,prev,next(前驱和后继), 后续我们就通过这个内部类来构造双…