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

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.lryc.cn/news/2404752.html

相关文章:

  • 华为手机开机卡在Huawei界面不动怎么办?
  • 并行硬件环境及并行编程
  • ORM框架(SQLAlchemy 与 Tortoise )
  • go语言map扩容
  • 安全访问家中 Linux 服务器的远程方案 —— 专为单用户场景设计
  • 前端开发三剑客:HTML5+CSS3+ES6
  • [Java 基础]Java 中的关键字
  • 5.3 Spring Boot整合JPA
  • 腾讯开源视频生成工具 HunyuanVideo-Avatar,上传一张图+一段音频,就能让图中的人物、动物甚至虚拟角色“活”过来,开口说话、唱歌、演相声!
  • [文献阅读] Emo-VITS - An Emotion Speech Synthesis Method Based on VITS
  • 网络协议通俗易懂详解指南
  • OpenCV-Python Tutorial : A Candy from Official Main Page(持续更新)
  • 【Vue】指令补充+样式绑定+计算属性+侦听器
  • .Net Framework 4/C# 泛型的使用、迭代器和分部类
  • LLM 笔记:Speculative Decoding 投机采样
  • 当SAP系统内计划订单转换为生产订单时发生了什么?
  • PDF转PPT转换方法总结
  • 3D Web轻量化引擎HOOPS Communicator的定制化能力全面解析
  • 【力扣链表篇】19.删除链表的倒数第N个节点
  • .Net Framework 4/C# 集合和索引器
  • 如何使用Jmeter进行压力测试?
  • Grafana-ECharts应用讲解(玫瑰图示例)
  • 洛谷P1591阶乘数码
  • 前端vue3 上传/导入文件 调用接口
  • 概述侧边导航的作用与价值
  • Python训练营-Day22-Titanic - Machine Learning from Disaster
  • FreeCAD:开源世界的三维建模利器
  • 指针的定义与使用
  • 嵌入式里的时间魔法:RTC 与 BKP 深度拆解
  • Java项目中常用的中间件及其高频问题避坑