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

OpenCV CUDA模块图像处理------双边滤波的GPU版本函数bilateralFilter()

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

算法描述

该函数在 GPU 上执行双边滤波操作,是一种非线性平滑滤波器,能够在 保留边缘的同时去除噪声。

函数原型

void cv::cuda::bilateralFilter 	
(InputArray  	src,OutputArray  	dst,int  	kernel_size,float  	sigma_color,float  	sigma_spatial,int  	borderMode = BORDER_DEFAULT,Stream &  	stream = Stream::Null() 
) 		

参数

  • src 源图像。支持的条件为:通道数不等于 2,且图像深度不能是 CV_8S、CV_32S 和 CV_64F。

  • dst 目标图像(输出图像)。

  • kernel_size 滤波核窗口大小。

  • sigma_color 颜色空间中的滤波参数(标准差),用于控制颜色差异的影响程度。

  • sigma_spatial 坐标空间中的滤波参数(标准差),用于控制空间距离的影响程度。

  • borderMode 边界类型。具体细节请参见 borderInterpolate 函数。目前支持的边界模式包括:

    • BORDER_REFLECT101
    • BORDER_REPLICATE
    • BORDER_CONSTANT
    • BORDER_REFLECT 和 BORDER_WRAP
  • stream 用于异步执行的流(Stream)。若使用默认值 Stream::Null(),则函数为同步执行。

代码示例

#include <iostream>
#include <opencv2/cudaimgproc.hpp>
#include <opencv2/opencv.hpp>int main()
{// Step 1: 读取图像cv::Mat h_img = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/Lenna.png", cv::IMREAD_COLOR );if ( h_img.empty() ){std::cerr << "Failed to load image!" << std::endl;return -1;}// Step 2: 将图像上传到 GPUcv::cuda::GpuMat d_img, d_dst;d_img.upload( h_img );// Step 3: 执行双边滤波int kernel_size     = 5;float sigma_color   = 25.0f;float sigma_spatial = 30.0f;int borderMode      = cv::BORDER_DEFAULT;cv::cuda::bilateralFilter( d_img, d_dst, kernel_size, sigma_color, sigma_spatial, borderMode );// Step 4: 下载结果并显示cv::Mat h_dst;d_dst.download( h_dst );cv::imshow( "Original", h_img );cv::imshow( "Denoised (Bilateral)", h_dst );cv::waitKey( 0 );return 0;
}

运行结果

在这里插入图片描述

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

相关文章:

  • 基于SDN环境下的DDoS异常攻击的检测与缓解
  • 二叉树day1
  • 如何使用插件和子主题添加WordPress自定义CSS(附:常见错误)
  • Linux系统-基本指令(5)
  • MQTTX连接阿里云的物联网配置
  • 00 Deep learning 之回归、拟合、逻辑回归
  • Nginx+Tomcat负载均衡集群
  • Oracle 故障实例 - 通过备份恢复到某时间点 故障恢复
  • 网络安全-等级保护(等保) 3-3 GB/T 36627-2018 《信息安全技术 网络安全等级保护测试评估技术指南》-2018-09-17发布【现行】
  • # 将本地UI生成器从VLLM迁移到DeepSeek API的完整指南
  • Unity异常上报飞书工具
  • 飞书常用功能(留档)
  • SpringBoot系列之RabbitMQ 实现订单超时未支付自动关闭功能
  • 内网横向之RDP缓存利用
  • 06-排序
  • B站缓存视频数据m4s转mp4
  • SpringBoot中缓存@Cacheable出错
  • 国产高云FPGA实现视频采集转UDP以太网输出,FPGA网络摄像头方案,提供2套Gowin工程源码和技术支持
  • Rust 学习笔记:使用 cargo install 安装二进制 crate
  • 【设计模式-4.7】行为型——备忘录模式
  • python第31天打卡
  • 多模态大语言模型arxiv论文略读(105)
  • Java-redis实现限时在线秒杀功能
  • Servlet 快速入门
  • 1130 - Host ‘xxx.x.xx.xxx‘is not allowed to connect to this MySQL server
  • 70道Hive高频题整理(附答案背诵版)
  • 如何合理设计缓存 Key的命名规范,以避免在共享 Redis 或跨服务场景下的冲突?
  • Java并发编程:读写锁与普通互斥锁的深度对比
  • 【ROS2】各种相关概念汇总解释
  • 动态规划-1143.最长公共子序列-力扣(LeetCode)