1. 归一化块滤波器:

    OpenCV函数 blur 执行了归一化块平滑操作。

    for ( int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2 ){ blur( src, dst, Size( i, i ), Point(-1,-1) );if( display_dst( DELAY_BLUR ) != 0 ) { return 0; } }
    

    我们输入4个实参 (详细的解释请参考 Reference):

    • src: 输入图像
    • dst: 输出图像
    • Size( w,h ): 定义内核大小( w 像素宽度, h 像素高度)
    • Point(-1, -1): 指定锚点位置(被平滑点), 如果是负值,取核的中心为锚点。
  2. 高斯滤波器:

    OpenCV函数 GaussianBlur 执行高斯平滑 :

    for ( int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2 ){ GaussianBlur( src, dst, Size( i, i ), 0, 0 );if( display_dst( DELAY_BLUR ) != 0 ) { return 0; } }
    

我们输入4个实参 (详细的解释请参考 Reference):

  • src: 输入图像
  • dst: 输出图像
  • Size(w, h): 定义内核的大小(需要考虑的邻域范围)。  和  必须是正奇数,否则将使用  和  参数来计算内核大小。
  • : x 方向标准方差, 如果是  则  使用内核大小计算得到。
  • : y 方向标准方差, 如果是  则  使用内核大小计算得到。.
  1. 中值滤波器:

    OpenCV函数 medianBlur 执行中值滤波操作:

    for ( int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2 ){ medianBlur ( src, dst, i );if( display_dst( DELAY_BLUR ) != 0 ) { return 0; } }
    

    我们用了3个参数:

    • src: 输入图像
    • dst: 输出图像, 必须与 src 相同类型
    • i: 内核大小 (只需一个值,因为我们使用正方形窗口),必须为奇数。
  2. 双边滤波器

    OpenCV函数 bilateralFilter 执行双边滤波操作:

    for ( int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2 ){ bilateralFilter ( src, dst, i, i*2, i/2 );if( display_dst( DELAY_BLUR ) != 0 ) { return 0; } }
    

    我们使用了5个参数:

    • src: 输入图像
    • dst: 输出图像
    • d: 像素的邻域直径
    • : 颜色空间的标准方差
    • : 坐标空间的标准方差(像素单位)
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"using namespace std;
using namespace cv;/// 全局变量
int DELAY_CAPTION = 1500;
int DELAY_BLUR = 100;
int MAX_KERNEL_LENGTH = 31;Mat src; Mat dst;
char window_name[] = "Filter Demo 1";/// 函数申明
int display_caption(char* caption);
int display_dst(int delay);/**
*  main 函数
*/
int main(int argc, char** argv)
{namedWindow(window_name, CV_WINDOW_AUTOSIZE);/// 载入原图像src = imread("C:/lena.jpg", 1);if (display_caption("Original Image") != 0) { return 0; }dst = src.clone();if (display_dst(DELAY_CAPTION) != 0) { return 0; }/// 使用 均值平滑if (display_caption("Homogeneous Blur") != 0) { return 0; }for (int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2){blur(src, dst, Size(i, i), Point(-1, -1));if (display_dst(DELAY_BLUR) != 0) { return 0; }}/// 使用高斯平滑if (display_caption("Gaussian Blur") != 0) { return 0; }for (int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2){GaussianBlur(src, dst, Size(i, i), 0, 0);if (display_dst(DELAY_BLUR) != 0) { return 0; }}/// 使用中值平滑if (display_caption("Median Blur") != 0) { return 0; }for (int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2){medianBlur(src, dst, i);if (display_dst(DELAY_BLUR) != 0) { return 0; }}/// 使用双边平滑if (display_caption("Bilateral Blur") != 0) { return 0; }for (int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2){bilateralFilter(src, dst, i, i * 2, i / 2);if (display_dst(DELAY_BLUR) != 0) { return 0; }}/// 等待用户输入display_caption("End: Press a key!");waitKey(0);return 0;
}int display_caption(char* caption)
{dst = Mat::zeros(src.size(), src.type());putText(dst, caption,Point(src.cols / 4, src.rows / 2),CV_FONT_HERSHEY_COMPLEX, 1, Scalar(255, 255, 255));imshow(window_name, dst);int c = waitKey(DELAY_CAPTION);if (c >= 0) { return -1; }return 0;
}int display_dst(int delay)
{imshow(window_name, dst);int c = waitKey(delay);if (c >= 0) { return -1; }return 0;
}

opencv简单滤波相关推荐

  1. OpenCV的滤波与卷积

    目录 预备知识 滤波.核和卷积 边界外推和边界处理 阈值化操作 Otsu算法 自适应阈值 平滑 简单模糊和方框型滤波器 中值滤波器 高斯滤波器 双边滤波器 导数和梯度 索贝尔导数 Scharr滤波器 ...

  2. opencv均值滤波,方盒滤波,cv2.boxFilter,cv2blur

    均值滤波 opencv使用均值滤波是通过cv2.blur来实现的,原理十分简单,就是根据周围取平均值 下面对方法进行介绍 def blur(src, ksize, dst=None, anchor=N ...

  3. OpenCV简单的过滤器平滑的实例(附完整代码)

    OpenCV简单的过滤器平滑的实例 OpenCV简单的过滤器平滑的实例 OpenCV简单的过滤器平滑的实例 #include <iostream> #include "openc ...

  4. OpenCV简单的几何绘图的实例(附完整代码)

    OpenCV简单的几何绘图的实例 OpenCV简单的几何绘图的实例 OpenCV简单的几何绘图的实例 #include <opencv2/core.hpp> #include <op ...

  5. 用opencv简单创建单色图片并保存

    用opencv简单创建图片 主要调用一些API来简单实现,包含部分数组知识(一个opencv图像是.array类型的二维或多维数组) // # numpy是python的一种开源数值计算扩展 impo ...

  6. 图像存储方式及使用OpenCV简单处理图像

    一.目的 简述图像存储方式及使用OpenCV简单处理图像. 二.图像存储方式 2.1.YUV 2.1.1.简介 YUV是编译true-color颜色空间(color space)的种类,Y'UV, Y ...

  7. 各种简单滤波的区别整理

    各种简单滤波的区别整理 1. 均值滤波(对高斯噪声具有较好的处理效果) 均值滤波在去噪声的同时会有如下缺点:边界模糊效应明显.细节丢失比较严重:无法去掉噪声,只能微弱的减弱它. 高斯噪声:高斯噪声是指 ...

  8. Android之OpenCv简单人脸识别功能(Bitmap)

    Android之OpenCv简单人脸识别功能 OpenCv的下载 下载地址 - https://opencv.org/releases/ doc 文档目录 samples 示例代码 sdk 编译后的动 ...

  9. opencv 简单的图像检测,识别,标注,

    2022/4/19 刚刚做了个升级版,就是第二种读取文件的方式,另外分函数写了 链接: python opencv 简单图像识别,标注 [升级版]_死非死的博客-CSDN博客 ____________ ...

最新文章

  1. 遍历map几种方式及应用
  2. Angular 指令ngTemplateOutlet的运行原理单步调试
  3. Linux下安全审计工具 lynis 使用说明
  4. 分布式 知乎 github_如何使用GitHub本机功能来帮助管理中型分布式团队
  5. 应用上云2小时烧掉近50万,创始人:差点破产,简直噩梦
  6. Python模块之uuid
  7. jsf tree组件_JSF UI组件标签属性示例教程
  8. windows下一些常用的dos命令
  9. ArcGIS图解建模工具与DEM提取山脊、山谷线(水文分析、表面分析)
  10. Hybrid APP介绍
  11. arcgis中python计算面积的表达式_ArcGIS字段计算中的Python语法错误
  12. memcached入门使用
  13. 什么是stochastic regressor
  14. proxmox PVE 安装 黑群晖
  15. 用django实现一个资产管理的系统
  16. python画图库哪个好_python画图库
  17. Cacti使用安装详解
  18. modbus tcp通讯modbus4j使用说明
  19. 计算机网就是因特网对吗,计算机因特网的介绍
  20. 当你收到大厂面试通知后,如下的准备可以大大提升面试成功率

热门文章

  1. 银河计算机网络,Python脚本之socket
  2. DNS的主从架构、子域委派、转发器
  3. 一秒解决CentOS下service 功能 不能使用 bash: service: command not found
  4. Wireshark抓取RTP包,还原语音
  5. WIN API当中的堆管理,虚拟内存及常规复制,移动,填充代码
  6. STM32F4读写内部FLASH【使用库函数】
  7. 定时发送服务器运行数据并设置阀值警报方法
  8. 《互联网运营智慧》十一月进展
  9. VC/MFC中常用宏的含义
  10. 【正一专栏】《神秘巨星》总有一种真诚让你泪流满面