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

OpenCV CUDA模块设备层----计算向量的平方根函数sqrt

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

算法描述

OpenCV 的 CUDA 设备函数(device function),用于在 GPU 上计算一个 uchar4 类型向量的平方根,并返回一个 float4 类型的结果。
这个函数通常出现在 OpenCV 的 CUDA 加速图像处理代码中,例如:

  • 图像归一化(Normalization)
  • 色彩空间转换
  • 卷积、滤波等操作中涉及数值稳定性的平方根计算

它被设计为在 CUDA kernel 中高效使用,适用于需要对图像像素批量执行数学运算的高性能场景。

函数原型

__device__ __forceinline__ float4 cv::cudev::sqrt(const uchar4 &a)

参数

  • const uchar4 &a 输入参数是一个 uchar4 类型的常量引用(即 4 个无符号字符)

代码


#include <opencv2/opencv.hpp>
#include <opencv2/cudaimgproc.hpp>
#include <opencv2/cudev.hpp>
#include <iostream>__global__ void sqrtKernel(const uchar4* input, float4* output, int numPixels) {int idx = blockIdx.x * blockDim.x + threadIdx.x;if (idx < numPixels) {output[idx] = cv::cudev::sqrt(input[idx]);}
}int main() {// 读取图像(RGBA 格式)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;}// 转换为 RGBAcv::Mat src;cv::cvtColor(bgr, src, cv::COLOR_BGR2BGRA);int width = src.cols;int height = src.rows;int numPixels = width * height;// 将输入图像上传到 GPUuchar4* d_input;cudaMalloc(&d_input, numPixels * sizeof(uchar4));cudaMemcpy(d_input, src.ptr<uchar4>(), numPixels * sizeof(uchar4), cudaMemcpyHostToDevice);// 分配输出内存float4* d_output;cudaMalloc(&d_output, numPixels * sizeof(float4));// 启动 kernelint blockSize = 256;int numBlocks = (numPixels + blockSize - 1) / blockSize;sqrtKernel<<<numBlocks, blockSize>>>(d_input, d_output, numPixels);// 下载结果回 CPUcv::Mat result(height, width, CV_32FC4);cudaMemcpy(result.ptr<float4>(), d_output, numPixels * sizeof(float4), cudaMemcpyDeviceToHost);// 显示或保存结果(例如将每个通道 clamp 到 [0,1] 并归一化显示)cv::Mat display;cv::normalize(result, display, 0, 1, cv::NORM_MINMAX, CV_32F);cv::imshow("Result", display);cv::waitKey(0);// 清理资源cudaFree(d_input);cudaFree(d_output);return 0;
}

运行结果

在这里插入图片描述

http://www.lqws.cn/news/579601.html

相关文章:

  • 【机器人】复现 HOV-SG 机器人导航 | 分层 开放词汇 | 3D 场景图
  • 极海G32R501双向数字电源解决方案 赋能AI服务器及电源应用创新
  • Android中Compose常用组件以及布局使用方法
  • 深入解析TCP:可靠传输的核心机制与实现逻辑
  • 首次使用“非英伟达”芯片!OpenAI租用谷歌TPU,降低推理计算成本
  • 成像光谱遥感技术中的AI革命:ChatGPT在遥感领域中的应用
  • (LeetCode 每日一题) 594. 最长和谐子序列 (哈希表)
  • redis相关内容以及安全知识
  • 开疆智能CCLinkIE转Canopen网关连接UV紫外灯配置案例
  • python包管理工具uv VS pip
  • iOS 接口频繁请求导致流量激增?抓包分析定位与修复全流程
  • 人工智能和云计算对金融未来的影响
  • 力扣 hot100 Day30
  • 键盘第一下无反应
  • Armbian 25.5.1 Noble Gnome 开启远程桌面功能
  • CMake中WIN32和CMAKE_HOST_WIN32的使用差异
  • Pytest pytest_runtest_makereport 钩子函数:测试失败信息收集与处理 —— Python 实践
  • (5)pytest-yield操作
  • Python量化金融:从数据到策略的工程实现
  • Serverless 架构入门与实战:AWS Lambda、Azure Functions、Cloudflare Workers 对比
  • CH32H417 替代 Cypress FX3 及优势探讨
  • RF100:多领域目标检测基准数据集(猫脸码客第284期)
  • Ubuntu更换Home目录所在硬盘的过程
  • 多重性校正:临床试验统计的关键防线
  • 文心大模型正式开源,开启AI普惠新时代
  • langchain从入门到精通(二十)——自定义文档加载器使用技巧及Blob 方案介绍
  • 佰力博科技与您探讨阻抗谱测量的基本原理和测量方法
  • web服务器搭建nginx
  • [特殊字符]【联邦学习实战】用 PyTorch 从 0 搭建一个最简单的联邦学习系统(含完整代码)
  • Python-Word文档、PPT、PDF以及Pillow处理图像详解