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

OpenCV CUDA模块设备层----- 正切(tangent)运算函数tan()

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

算法描述

OpenCV的CUDA模块(cudev)中的一个设备函数(device function),用于在 GPU 上对uchar3类型的向量(如 RGB 像素)进行正切(tangent)运算,并返回一个 float3 类型的结果。

函数原型

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

参数

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

代码

#include <opencv2/opencv.hpp>
#include <opencv2/cudaimgproc.hpp>
#include <opencv2/cudev.hpp>
#include <iostream>__global__ void tanKernel(const uchar3* input, float3* output, int numPixels) {int idx = blockIdx.x * blockDim.x + threadIdx.x;// if (idx < numPixels) {output[idx] = cv::cudev::tan(input[idx]);// }
}int main() {// 读取图像cv::Mat bgr = cv::imread("/media/dingxin/data/study/OpenCV/sources/images/img0.jpg");if (bgr.empty()) {std::cerr << "Failed to load image!" << std::endl;return -1;}// 转换为 RGB 格式(uchar3)cv::Mat src;cv::cvtColor(bgr, src, cv::COLOR_BGR2RGB);int width = src.cols;int height = src.rows;int numPixels = width * height;// 分配 GPU 内存uchar3* d_input;float3* d_output;cudaMalloc(&d_input, numPixels * sizeof(uchar3));cudaMalloc(&d_output, numPixels * sizeof(float3));cudaMemcpy(d_input, src.ptr<uchar3>(), numPixels * sizeof(uchar3), cudaMemcpyHostToDevice);// 启动 kernelint blockSize = 256;int numBlocks = (numPixels + blockSize - 1) / blockSize;tanKernel<<<numBlocks, blockSize>>>(d_input, d_output, numPixels);// 下载结果cv::Mat result(height, width, CV_32FC3);cudaMemcpy(result.ptr<float3>(), d_output, numPixels * sizeof(float3), cudaMemcpyDeviceToHost);// 显示结果(注意:可能有非常大的值)cv::Mat display;cv::normalize(result, display, 0, 1, cv::NORM_MINMAX, CV_32F);cv::imshow("Tan Result", display);cv::waitKey(0);// 清理资源cudaFree(d_input);cudaFree(d_output);return 0;
}

运行结果

在这里插入图片描述

http://www.lryc.cn/news/578195.html

相关文章:

  • 一文讲清楚React中类组件与函数组件的区别与联系
  • C/C++ 使用rapidjson库 操作Json格式文件(创建、插入、解析、修改、删除)
  • 【2025最新】Ubuntu22.04 安装 MySQL8.0 教程
  • 零成本接入+企业级部署:2025年AI大模型实战指南
  • Linux云计算基础篇(2)
  • 对称非对称加密,https和http,https通讯原理,Charles抓包原理
  • 三态门Multisim电路仿真——硬件工程师笔记
  • 大模型在多发性硬化预测及治疗方案制定中的应用研究
  • Python 安装使用教程
  • 探索未来AI的无限可能:使用oTTomator Live Agent Studio平台上的开源AI代理!
  • JSON-LD 开发手册
  • 衡石科技chatbot分析手册--钉钉数据问答机器人配置
  • 衡石科技使用手册-企业即时通讯工具数据问答机器人用户手册
  • java中agent的作用
  • 免费文件管理 智能转换GC-Prevue:PDF 转 Word 多种格式 一键完成
  • 云手机主要是指什么?
  • 纯前端本地文件管理器(VSCode风格)(浏览器对本地文件增删改查)
  • DAY 45 Tensorboard使用介绍
  • 2 大语言模型基础-2.2 生成式预训练语言模型GPT-2.2.2 有监督下游任务微调-Instruct-GPT强化学习奖励模型的结构改造与维度转换解析
  • 高效读取文件中指定行段的两种方法
  • 矩阵方程 线性代数
  • EA自动交易完全指南:从策略设计到实盘部署
  • 区块链技术有哪些运用场景?
  • CppCon 2018 学习:A Little Order! Delving into the STL sorting algorithms
  • 《如何在 Spring 中实现 MQ 消息的自动重连:监听与发送双通道策略》
  • mkyaffs2img 的 命令行工具的编译
  • Dubbo3高并发控制实战技巧
  • SCAU期末笔记 - 操作系统 选填题
  • QT中QSS样式表的详细介绍
  • localStorage 和 sessionStorage