前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++ OpenCV去燥函数fastNlMeansDenoising的使用

C++ OpenCV去燥函数fastNlMeansDenoising的使用

作者头像
Vaccae
发布2021-04-21 16:23:32
2.7K0
发布2021-04-21 16:23:32
举报
文章被收录于专栏:微卡智享微卡智享

学更好的别人,

做更好的自己。

——《微卡智享》

本文长度为1857,预计阅读5分钟

前言

在使用OpenCV进行图像处理时,一般都使用高斯滤波或是中值滤波进行去噪,原理也是选取像素周围一个小的邻域铂高斯或中值平均取代中心像素。而今天介绍的NlMeans是对整幅图像进行去噪。

实现效果

上图中右边为使用fastNlMeansDenoising去燥后的效果,可以看出来,整张图片的清晰度和原图基本无变化 ,标红框的地方可以看到平滑了好多。如果使用高斯或是中值滤波,图像会变的模糊些。

fastNIMeansDenosing介绍

微卡智享

NL-Means的全称是:Non-Local Means,又称做非局部平均去燥,是利用了整幅图进行了去燥,所以相对来说,运行时消耗的时间也会更多。

耗时对比

Debug模式下耗时:39074.4毫秒,足足接近了40秒

Release模式下耗时:576.84毫秒,不到1秒

(还是那句话Release模式要比Debug快N倍)

fastNlMeansDenoising相关函数

  • fastNlMeansDenoising() - 使用单个灰度图像
  • fastNlMeansDenoisingColored() - 使用彩色图像。
  • fastNlMeansDenoisingMulti() - 用于在短时间内捕获的图像序列(灰度图像)
  • fastNlMeansDenoisingColoredMulti() - 与上面相同,但用于彩色图像。

这篇我们只用到了第二个fastNlMeansDenoisingColored

代码语言:javascript
复制
CV_EXPORTS_W void fastNlMeansDenoisingColored( InputArray src, OutputArray dst,
        float h = 3, float hColor = 3,
        int templateWindowSize = 7, int searchWindowSize = 21
        
//参数说明:
//src 输入图像
//dst 输出图像
//h 决定过滤器强度。h 值高可以很好的去除噪声,但也会把图像的细节抹去。(取 10 的效果不错)
//hColor 与h相同,使用于彩色图像
//templateWindowSize 奇数。(推荐值为 7)
//searchWindowSize 奇数。(推荐值为 21)

完整代码

代码语言:javascript
复制
#include <iostream>
#include <opencv2/opencv.hpp>
#include "CvUtils.h"

using namespace cv;
using namespace std;

int main(int argc, char** argv) {
  Mat src = imread("E:/DCIM/person/song5.jpg");
  CvUtils::MatResize(src);
  CvUtils::SetShowWindow(src, "src", 50, 50);
  imshow("src", src);

  //fastNlMeansDenoisingColored
  double time = getTickCount();
  Mat denoisingdst;
  fastNlMeansDenoisingColored(src, denoisingdst);
  time = getTickCount() - time;
  cout << "运行时间:" << time / getTickFrequency() * 1000 << endl;

  CvUtils::SetShowWindow(denoisingdst, "denoising", src.cols+70, 50);
  imshow("denoising", denoisingdst);

  waitKey(0);
  return 0;
}

1

简单美颜

在找不同图片进行测试时,发现了用这个函数可以实现一个简单的美颜效果,直接上图。

看看右边,直接就是磨过皮的嘛!!!

源码地址

https://github.com/Vaccae/OpenCVDemoCpp.git

点击下方的原文链接可以跳转到码云的源码地址。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-04-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微卡智享 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • NL-Means的全称是:Non-Local Means,又称做非局部平均去燥,是利用了整幅图进行了去燥,所以相对来说,运行时消耗的时间也会更多。
    • 耗时对比
      • fastNlMeansDenoising相关函数
        • 完整代码
          • 源码地址
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档