OpenCV计算摄影学(3)CUDA图像去噪函数fastNlMeansDenoising()
- 人工智能
- 2025-09-20 05:30:02

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C++11 算法描述
使用非局部均值去噪算法(Non-local Means Denoising algorithm)执行图像去噪,该算法来源于 http:// .ipol.im/pub/algo/bcm_non_local_means_denoising,并包含了若干计算优化。预期噪声为高斯白噪声。
cv::cuda::fastNlMeansDenoising 是 OpenCV 的 CUDA 模块中用于图像去噪的一个函数。此函数实现了快速非局部均值去噪算法,旨在减少图像中的噪声同时尽可能保留边缘细节。
函数原型 void cv::cuda::fastNlMeansDenoising ( InputArray src, OutputArray dst, float h, int search_window = 21, int block_size = 7, Stream & stream = Stream::Null() ) 参数 参数src 输入8位1通道、2通道或3通道的图像。参数sdst 与 src 具有相同大小和类型的输出图像。参数sh 调节滤波强度的参数。较大的 h 值能完美地去除噪声,但也会去除图像细节;较小的 h 值则会保留细节,但也会保留一些噪声。参数ssearch_window 用于计算给定像素加权平均值的窗口大小(以像素为单位)。应该是奇数。性能受其影响呈线性关系:更大的 search_window 意味着更长的去噪时间。推荐值为21像素。参数sblock_size 用于计算权重的模板块大小(以像素为单位)。应该是奇数。推荐值为7像素。参数sstream 用于异步调用的流。 该函数预期应用于灰度图像。对于彩色图像,请参阅 FastNonLocalMeansDenoising::labMethod。 代码示例电脑没有Nvidia的显卡,程序编译不了,opencv不支持cuda的也编译不了。
#include <opencv2/opencv.hpp> #include <opencv2/cudaimgproc.hpp> #include <opencv2/core/cuda.hpp> int main() { // 加载输入图像 cv::Mat src = cv::imread("noisy_image.jpg", cv::IMREAD_COLOR); if (src.empty()) { std::cerr << "无法加载图像文件" << std::endl; return -1; } // 创建与src相同大小和类型的输出图像dst cv::Mat dst; // 将输入图像上传到GPU cv::cuda::GpuMat gpu_src, gpu_dst; gpu_src.upload(src); // 创建CUDA流(可选) cv::cuda::Stream stream; // 应用快速非局部均值去噪算法 cv::cuda::fastNlMeansDenoising(gpu_src, gpu_dst, 3.0f /* h */, 21 /* search_window */, 7 /* block_size */, stream); // 将去噪后的图像从GPU下载到CPU gpu_dst.download(dst); // 保存去噪后的图像 cv::imwrite("denoised_image.jpg", dst); // 显示原始图像和去噪后的图像 cv::imshow("Noisy Image", src); cv::imshow("Denoised Image", dst); cv::waitKey(); return 0; }OpenCV计算摄影学(3)CUDA图像去噪函数fastNlMeansDenoising()由讯客互联人工智能栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“OpenCV计算摄影学(3)CUDA图像去噪函数fastNlMeansDenoising()”