OpenCV CUDA模块设备层-----双曲正弦函数sinh()

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

算法描述

OpenCV的CUDA 模块(cv::cudev)中的一个设备端数学函数,用于在 GPU 上对 uchar3 类型的像素值(如RGB图像中的一个像素)逐通道计算双曲正弦函数(hyperbolic sine),并将结果转换为float3类型返回。

函数原型

__device__ __forceinline__ float3 cv::cudev::sinh 	( 	const uchar3 &  	a	) 	

参数

  • a const uchar3& 输入的 3 通道无符号字符向量(如 RGB 图像中的一个像素)。

返回值

  • 返回一个新的 float3 值;
  • 每个通道的值为 sinh((float)a.x), sinh((float)a.y), sinh((float)a.z);
  • 使用的是 CUDA 内建函数 sinhf(…) 来计算双曲正弦。

代码


#include <opencv2/cudaimgproc.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/cudev/util/vec_math.hpp>using namespace cv;
using namespace cv::cudev;// CUDA 核函数:对 uchar3 像素计算 sinh,并确保输出在 [0,1]
template <typename SrcPtr, typename DstPtr>
__global__ void sinhKernel(SrcPtr src, DstPtr dst, int width, int height) {int x = blockIdx.x * blockDim.x + threadIdx.x;int y = blockIdx.y * blockDim.y + threadIdx.y;if (x < width && y < height) {// 获取原始像素值uchar3 val = src(y, x);// Step 1: 将 uchar3 归一化到 [0,1]float scale = 1.0f / 255.0f;float fx = val.x * scale;float fy = val.y * scale;float fz = val.z * scale;// Step 2: 构造一个 "fake" uchar3 输入,表示 [0,1] 区间uchar3 fake_input;fake_input.x = static_cast<unsigned char>(fx * 255.0f);fake_input.y = static_cast<unsigned char>(fy * 255.0f);fake_input.z = static_cast<unsigned char>(fz * 255.0f);// Step 3: 调用 OpenCV 提供的 sinh 函数(唯一一次调用)float3 sinhVal = sinh(fake_input);  // ←←← 这里才是你想要的 cv::cudev::sinh(...)// Step 4: 将 sinh 输出压缩到 [0,1]const float inv_sinh1 = 1.0f / sinhf(1.0f);  // sinh([0,1]) ∈ [0, ~1.175]sinhVal.x *= inv_sinh1;sinhVal.y *= inv_sinh1;sinhVal.z *= inv_sinh1;// Step 5: 写入输出图像dst(y, x) = sinhVal;}
}int main() {// 加载图像Mat h_img = imread("/media/dingxin/data/study/OpenCV/sources/images/img0.jpg", IMREAD_COLOR);if (h_img.empty()) {std::cerr << "Failed to load image!" << std::endl;return -1;}// 上传到 GPUcuda::GpuMat d_img, d_result;d_img.upload(h_img);d_result.create(d_img.size(), CV_32FC3);  // float3 对应 CV_32FC3// 构造 PtrStepSz 访问器auto ptr = PtrStepSz<uchar3>(d_img);auto dptr = PtrStepSz<float3>(d_result);// 设置核函数参数dim3 block(16, 16);dim3 grid((d_img.cols + block.x - 1) / block.x,(d_img.rows + block.y - 1) / block.y);// 启动核函数sinhKernel<<<grid, block>>>(ptr, dptr, d_img.cols, d_img.rows);cudaDeviceSynchronize();// 下载并显示结果Mat h_result;d_result.download(h_result);imshow("Sinh Image", h_result);            // 已经是 [0,1] 浮点图像imwrite("output_sinh_image.png", h_result * 255);  // 保存为 PNGwaitKey(0);return 0;
}

运行结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/86408.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/86408.shtml

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

相关文章

使用 Xinference 命令行工具(xinference launch)部署 Nanonets-OCR-s

使用Xinference命令行工具(xinference launch)部署Nanonets-OCR-s 一、核心优势与适用场景 通过xinference launch命令可直接在命令行完成模型部署,无需编写Python代码,适合快速验证或生产环境批量部署。 二、部署步骤:从命令行启动模型 1. 确认环境与依赖 已安装Xinf…

鸿蒙 List 组件解析:从基础列表到高性能界面开发指南

一、引言&#xff1a;列表布局 —— 鸿蒙应用的数据展示中枢 在鸿蒙应用开发体系中&#xff0c;列表布局是处理结构化数据展示的核心场景。从新闻资讯的信息流、电商平台的商品陈列到任务管理的待办事项&#xff0c;几乎所有中大型应用都依赖高效的列表组件实现数据可视化。鸿…

原生微信小程序中限制多选框(Checkbox)可选个数的实现详解

在实际业务场景中&#xff0c;我们经常会遇到表单中的复选框多选限制需求。例如最多只能选择 3 个爱好、标签、兴趣点等&#xff0c;这时就需要在微信小程序中手动控制 Checkbox 的选择行为。 本文将通过一个完整的示例&#xff0c;演示如何实现最多只能选择 N 个的 Checkbox …

OpenCV CUDA模块设备层-----线性插值函数log()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 该函数用于创建线性插值访问器&#xff0c;支持对GPU内存中的图像数据进行双线性插值采样。主要应用于图像缩放、旋转等几何变换中需要亚像素级精…

Redis 单线程的“天花板”与集群的必要性

虽然 Redis 以其单线程模型&#xff08;主要是处理请求的核心逻辑&#xff09;带来了极高的性能和简洁性&#xff0c;但这并不意味着它没有瓶颈。 CPU 瓶颈&#xff1a;当业务逻辑复杂&#xff0c;或者 Redis 执行大量计算密集型操作&#xff08;比如使用 Lua 脚本进行复杂处理…

16.7 Prometheus+Grafana实战:容器化监控与日志聚合一站式解决方案

《Prometheus+Grafana实战:容器化监控与日志聚合一站式解决方案》 关键词:容器化监控、日志聚合、Prometheus、Grafana、ELK Stack、用户反馈收集 容器化监控与日志系统的架构设计 在 LanguageMentor Agent 生产部署中,监控系统需要覆盖以下维度: #mermaid-svg-I7cOqUK0i…

商务创业项目策划计划书PPT模版

创业商业融资计划书PPT模版&#xff0c;商务商业计划融资书PPT模版&#xff0c;创业融资计划书PPT模版&#xff0c;框架完整创业融资计划书PPT模版 商务创业项目策划计划书PPT模版&#xff1a;https://pan.quark.cn/s/d07d22408497

【软考高级系统架构论文】论面向方面的编程技术及其应用

论文真题: 请围绕“论软件测试中缺陷管理及其应用”论题,依次从以下三个方面进行论述: 概要叙述你参与管理和开发的软件项目以及承担的工作。详细论述常见的缺陷种类及级别,论述缺陷管理的基本流程。结合你具体参与管理和开发的实际项目,说明是如何进行缺陷管理的。请具体…

人机协作新范式:GEO与COKE框架的融合应用与品牌大模型种草实践

在人工智能迅猛发展的今天&#xff0c;我们正经历着人机关系的根本性重构。从工具性使用到协作伙伴关系&#xff0c;AI正在以前所未有的方式融入企业运营和品牌建设的各个环节。尤其是在品牌传播领域&#xff0c;“品牌大模型种草”正在成为品牌实现优质曝光和用户信任构建的新…

速通KVM(云计算学习指南)

第一章 云端的变形金刚&#xff1a;KVM的云计算基因 1.1 云计算与KVM的共生关系 想象一下&#xff0c;你有一台魔法服务器&#xff0c;它能像变形金刚一样随时分解成多台独立的小服务器&#xff0c;又能瞬间合体恢复原状——这就是KVM在云计算中扮演的角色。作为Linux内核的原…

C#最佳实践:为何优先使用隐式类型

C#最佳实践:为何优先使用隐式类型 在C#的编程世界里,类型声明是编写代码的重要环节。从早期严格指定变量类型,到引入隐式类型var,编程方式发生了不小的变革。隐式类型并非简单的语法糖,合理使用它能让代码更简洁、更易读,还能适应复杂的编程场景。接下来,我们就深入探讨…

PG靶机复现 Squid

官方定义为easy级别&#xff0c;因为省略了提权阶段&#xff0c;这个靶机主要是利用3128 Squid服务 枚举 通过nmap扫描到3128端口开启。 Squid 是一个缓存和转发的 HTTP 网络代理。它有多种用途&#xff0c;包括通过缓存重复请求来加速 web 服务器&#xff0c;为共享网络资源…

Java底层原理:深入理解JVM类加载机制与反射机制

一、JVM类加载机制 JVM类加载机制是Java运行时环境的重要组成部分&#xff0c;它负责将字节码文件加载到JVM内存中&#xff0c;并将其转换为可执行的类。类加载机制的实现涉及类加载器&#xff08;ClassLoader&#xff09;、类加载过程和类加载器的层次结构。 &#xff08;一…

系统思考:结构影响行为

感谢今天参与沙龙伙伴的评价&#xff0c;虽然只有短短半天的时间&#xff0c;希望今天的交流能为大家带来一些思考的火花。真正的改变&#xff0c;往往不仅来自一次启发&#xff0c;更来自一个支持改变的结构。 就像系统思考中所说的&#xff1a;“结构影响行为。”如果我们希望…

Ubuntu 20.04 系统上运行 SLAM卡顿是什么原因

在 Ubuntu 20.04 系统上运行 SLAM&#xff08;Simultaneous Localization and Mapping&#xff09;数据集时出现卡顿&#xff0c;可能是由硬件、软件配置或数据集处理需求等多方面原因导致。以下是一些可能的原因和解决建议&#xff1a; 1. 硬件性能瓶颈 尽管你使用的是 NVID…

Starwind商用共享存储解决方案——安装篇

介绍 StarWind 是一家提供虚拟化和存储解决方案的软件公司&#xff0c;主要专注于为中小企业&#xff08;SME&#xff09;和远程办公室/分支机构&#xff08;ROBO&#xff09;环境提供高性价比的虚拟化存储解决方案。其核心产品包括 StarWind Virtual SAN 和 StarWind NAS 等&…

Unity | AmplifyShaderEditor插件基础(第十集:噪声的种类+火焰制作-中)

一、&#x1f44b;&#x1f3fb;前言 你现在看见的是一套非常系统的ASE入门学习教程&#xff0c;并不是心血来潮随心创作的。 up原来是初中物理老师&#xff08;有教师资格证&#xff09;后转入程序行业&#xff0c;认真学习过课程设计等相关知识&#xff0c;只要你认真的学每一…

从零开始的二三维CAD|CAE轻量级软件开发:学习以及研发,Gmsh的脚本编辑器设计!

背景: 痛点: 1.编写.geo脚本, 没有智能提示很头大; 2.没有高亮显示很头大! 在数值仿真过程中,大家离不开gmsh这个软件,而在学习的过程中,也离不开要编写.geo脚本, 写这种脚本麻烦的要死,那么多脚本函数要记? 反正写的很头大, 所以,既然为了方便大家,也为了方便自己,不如自…

ModerationModel温和模式

ModerationModel能够对内容进⾏合规检测&#xff0c;屏蔽那些不合规的内容。未来如果你的⼤模型应⽤需要对外提供 服务时&#xff0c;合规就是⼀个必须的标准。 1、代码 import dev.langchain4j.model.moderation.Moderation; import dev.langchain4j.model.moderation.Modera…

OpenDeepWiki:AI代码对话新纪元

OpenDeepWiki 现已支持更智能的多轮对话能力&#xff0c;让您可以与代码库进行深入交流&#xff0c;像与真人对话一样理解代码逻辑和架构。新的对话系统能够保持上下文连贯性&#xff0c;理解复杂查询&#xff0c;并提供更精准的回答。 系统接入能力 现在您可以轻松将 OpenDeep…