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

OpenCV CUDA模块设备层-----二值化阈值操作函数thresh_binary_func()

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

算法描述

OpenCV 的 CUDA 模块(cudev) 中的一个设备和主机通用函数(host/device function),用于创建一个二值化阈值操作函数对象(functor)。
这个函数返回一个仿函数(functor),用于在 GPU 上执行 二值化阈值处理(Threshold Binary),即:
如果像素值大于 thresh,则设为 maxVal;否则设为 0。

函数原型

__host__ __device__ ThreshBinaryFunc<T> cv::cudev::thresh_binary_func 	( 	T  	thresh,T  	maxVal ) 		

参数

  • T thresh 阈值,如果像素值大于该值则保留最大值
  • T maxVal 像素超过阈值时设置的最大值

代码


#include <opencv2/cudev.hpp>
#include <opencv2/cudaimgproc.hpp>
#include <opencv2/highgui.hpp>
#include <iostream>// CUDA kernel 使用 functor 对图像进行二值化
template <typename T>
__global__ void thresholdKernel(const T* input, T* output, int numPixels,cv::cudev::ThreshBinaryFunc<T> func) {int idx = blockIdx.x * blockDim.x + threadIdx.x;if (idx < numPixels) {output[idx] = func(input[idx]);}
}int main() {// Step 1: 读取图像并转为灰度图cv::Mat bgr = cv::imread("/media/dingxin/data/study/OpenCV/sources/images/Lenna.png", cv::IMREAD_COLOR);if (bgr.empty()) {std::cerr << "Failed to load image!" << std::endl;return -1;}cv::Mat src;cv::cvtColor(bgr, src, cv::COLOR_BGR2GRAY); // 灰度图int width = src.cols;int height = src.rows;int numPixels = width * height;// Step 2: 分配 GPU 内存uchar* d_input, *d_output;cudaMalloc(&d_input, numPixels * sizeof(uchar));cudaMalloc(&d_output, numPixels * sizeof(uchar));cudaMemcpy(d_input, src.data, numPixels * sizeof(uchar), cudaMemcpyHostToDevice);// Step 3: 创建二值化函数对象auto func = cv::cudev::thresh_binary_func<uchar>(128, 255);// Step 4: 启动 kernelint blockSize = 256;int numBlocks = (numPixels + blockSize - 1) / blockSize;thresholdKernel<<<numBlocks, blockSize>>>(d_input, d_output, numPixels, func);// Step 5: 下载结果cv::Mat result(height, width, CV_8U);cudaMemcpy(result.data, d_output, numPixels * sizeof(uchar), cudaMemcpyDeviceToHost);// Step 6: 显示结果cv::imshow("Binary Threshold Result", result);cv::waitKey(0);cv::imwrite("binary_result.jpg", result);// Step 7: 清理资源cudaFree(d_input);cudaFree(d_output);return 0;
}

运行结果

在这里插入图片描述

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

相关文章:

  • android车载开发之HVAC
  • Conda 虚拟环境克隆与 PyCharm 配置教程
  • C# 程序:查看 PageUp 热键消息映射表
  • 系统性能优化-9 HTTP1.1
  • 柱塞泵体结构化网格划分
  • 408第三季part1 - 操作系统 - 基本分页II
  • 【仿muduo库实现并发服务器】Channel模块
  • 安卓内核定制开发笔记(三)系统调用Hook
  • 打造可观测的 iOS CICD 流程:调试、追踪与质量保障全记录
  • 计算机网络(二)应用层HTTP协议
  • 数据结构day6——内核链表
  • 修改Spatial-MLLM项目,使其专注于无人机航拍视频的空间理解
  • ESP32-S3开发板深度评测:AI语音识别与图像处理全面解析
  • [2025CVPR]DE-GANs:一种高效的生成对抗网络
  • Android屏幕共享+WebSocket实现传输截图
  • 【代码审计】安全审核常见漏洞修复策略
  • Vue 3 中的 `h` 函数详解
  • android RecyclerView隐藏整个Item后,该Item还占位留白问题
  • 【Java编程动手学】Java的“三体”世界:JVM、JRE、JDK的共生之道
  • 从 0 到 1 构建可视化限流演示:React + Framer Motion 实现 Token Bucket 动画
  • 折线图多数据处理
  • 基于Halcon平台的常规OCR与深度OCR性能对比分析
  • 前端技术栈 —— HTML、CSS和JavaScirpt执行环境
  • 热血三国野地名将列表
  • 如何hack边缘的kubelet修改Cgroup数值
  • 事务隔离级别深度解析:机制、语法与实战指
  • Jenkins生态与拓展:构建现代化DevOps工具链的终极指南
  • android apk签名
  • Django打造智能Web机器人控制平台
  • mac部署dify