当前位置: 首页 > 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.xdnf.cn/news/1075609.html

相关文章:

  • CSDN博客大搬家(本地下载markdown合适和图片本地化)
  • 关于 java:8. Java 内存模型与 JVM 基础
  • 基础算法合集-图论
  • 字节跳动 C++ QT PC客户端面试
  • Bessel位势方程求解步骤
  • OpenCV计算机视觉实战(14)——直方图均衡化
  • AutoCAD Electrical 2009无法激活
  • 通过python+openCV实现对图片中箭头方向的判断
  • 【Java面试】10GB,1GB内存,如何排序?
  • SQL参数化查询:防注入与计划缓存的双重优势
  • 「Java案例」计算矩形面积
  • 嵌入式SoC多线程架构迁移多进程架构开发技巧
  • 《用奥卡姆剃刀原理,为前端开发“减负增效”》
  • Ubuntu22.04 you are in emergency mode,键盘失效无法进入root命令行
  • 【Python使用】嘿马云课堂web完整实战项目第2篇:CMS页面管理需求,后端工程搭建【附代码文档】
  • Git 简介安装教程
  • vscode 改注释的颜色,默认是灰色的,想改成红色
  • 大数据(1)-hdfshbase
  • 【零基础学AI】第13讲:随机森林实战 - 用户行为预测
  • Spring Security 鉴权与授权详解(前后端分离项目)
  • 电脑开机加速工具,优化启动项管理
  • 服务器上设置了代理之后,服务器可以访问外网,但是不能访问服务器本地。如何解决
  • 重构老项目不再“踩雷”:飞算JavaAI的本地化智能合并实战
  • HarmonyOS NEXT应用元服务常见列表操作多类型列表项场景
  • 设计模式之外观模式
  • .net8导出影像图片按现场及天拆分
  • 调试W5500(作为服务器)
  • macos 使用 vllm 启动模型
  • 【微服务】.Net中使用Consul实现服务高可用
  • 51c大模型~合集144