本篇博客主要介绍如何使用OpenCV自带的归一化滤波器来对图片进行处理,达到模糊图片的效果。在代码中通过使用一个TrackerBar动态改变。具体的还是根据代码来进行解释吧:
先看一下效果图:

gif效果图虽然不清晰,但是可以很明显的通过拖动TrackerBar使得图片更加模糊或者清晰了,下面来看一下具体实现的代码:

#include <iostream>
#include <opencv2\opencv.hpp>
using namespace cv;
using namespace std;const char* source_window = "source";
int initial_size = 1;
Mat source, result;
void onSizeChange(int position) {if (position == 0) {position = 1;}cout << "position" << position << endl;initial_size = position;try {blur(source, result, Size(initial_size, initial_size));imshow(source_window, result);}catch (Exception e) {std::cout << "Exception message = " << e.msg << std::endl;}
}
int main()
{source = imread("fifth.jpg", IMREAD_UNCHANGED);result.create(source.rows,source.cols,source.channels());cvNamedWindow(source_window, CV_WINDOW_AUTOSIZE);cvCreateTrackbar("changeSize", source_window, &initial_size, 100, onSizeChange);cvSetTrackbarPos("changeSize", source_window, 0);waitKey(0);return 0;
}

主要实现模糊的代码就是blur(source, result, Size(initial_size, initial_size)),其中source是输入的图像,result是输出的图像,Size代表的是核窗口的大小,原有的像素点的通过计算将被核窗口内所有像素的均值取代,随意这个Size越大代表参与平均的像素点数量越多,反应到结果上就是原有像素的值可能变化更大,值受到影响越大。

看一下相关理论方面的东西:
平滑 也称 模糊, 是一项简单且使用频率很高的图像处理方法。
平滑处理的用途有很多, 但是在本教程中我们仅仅关注它减少噪声的功用 (其他用途在以后的教程中会接触到)。
平滑处理时需要用到一个 滤波器 。 最常用的滤波器是 线性 滤波器,线性滤波处理的输出像素值 (i.e. g(i,j)) 是输入像素值 (i.e. f(i+k,j+l))的加权和 :

h(k,l) 称为 核, 它仅仅是一个加权系数。
不妨把 滤波器 想象成一个包含加权系数的窗口,当使用这个滤波器平滑处理图像时,就把这个窗口滑过图像。
归一化块滤波器 (Normalized Box Filter)¶
最简单的滤波器, 输出像素值是核窗口内像素值的 均值 ( 所有像素加权系数相等)
核如下:

blur的函数原型:

/** @brief Blurs an image using the normalized box filter.The function smoothes an image using the kernel:\f[\texttt{K} =  \frac{1}{\texttt{ksize.width*ksize.height}} \begin{bmatrix} 1 & 1 & 1 &  \cdots & 1 & 1  \\ 1 & 1 & 1 &  \cdots & 1 & 1  \\ \hdotsfor{6} \\ 1 & 1 & 1 &  \cdots & 1 & 1  \\ \end{bmatrix}\f]The call `blur(src, dst, ksize, anchor, borderType)` is equivalent to `boxFilter(src, dst, src.type(),
anchor, true, borderType)`.@param src input image; it can have any number of channels, which are processed independently, but
the depth should be CV_8U, CV_16U, CV_16S, CV_32F or CV_64F.
@param dst output image of the same size and type as src.
@param ksize blurring kernel size.
@param anchor anchor point; default value Point(-1,-1) means that the anchor is at the kernel
center.
@param borderType border mode used to extrapolate pixels outside of the image, see cv::BorderTypes
@sa  boxFilter, bilateralFilter, GaussianBlur, medianBlur*/
CV_EXPORTS_W void blur( InputArray src, OutputArray dst,Size ksize, Point anchor = Point(-1,-1),int borderType = BORDER_DEFAULT );

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

好了,函数的注解也已经提供了,不知道我理解的对不对,如果有什么不正确的地方还请大神指正,我早点改正,不胜感激!!!有兴趣的朋友可以以关注我,遇到问题大家一起讨论一下!!

这是我的微信公众号,如果可以的话,希望您可以帮忙关注一下,这将是对我最大的鼓励了,谢谢!!

代码地址:
文件夹名字为Blur的那一个,不要点错了啊

使用OpenCV进行图片模糊处理(归一化滤波器)相关推荐

  1. 使用OpenCV进行图片模糊处理(高斯滤波器)

    本篇博客主要介绍如何使用OpenCV自带的高斯滤波器来对图片进行处理,达到模糊图片的效果.在代码中通过使用一个TrackerBar动态改变.具体的还是根据代码来进行解释吧: 先看一下效果图: gif不 ...

  2. OpenCV - 将图片转换为深度学习模型输入格式,BGR通道转RGB,图片归一化,HWC转CHW

    文章目录 1 将图片转换为深度模型输入格式 1.1 自行进行转换 1.1.1 BGR通道转RGB通道 1.1.2 图片归一化 1.1.3 HWC转CHW 1.2 使用cv::dnn::blobFrom ...

  3. 使用opencv把视频转图片以及图片模糊问题

    代码如下: # -*- coding: utf-8 -*-# # Author: weiz # Date: 2019/11/26 10:22 # Name: main # Description: i ...

  4. OpenCV中的模糊处理(python)

    OpenCV中的模糊处理 前言 1.写在模糊理解前 1.1什么是卷积 1.2滤波器 2.模糊方式 2.1均值模糊(滤波) 2.2中值模糊 2.3高斯模糊 总结 前言 接到考核任务. 在学OpenCV模 ...

  5. python怎么换背景颜色_用opencv给图片换背景色的示例代码

    图像平滑 模糊/平滑图片来消除图片噪声 OpenCV函数:cv2.blur(), cv2.GaussianBlur(), cv2.medianBlur(), cv2.bilateralFilter() ...

  6. android端基于openCV给图片打马赛克

    最近一直在捣腾openCV,看到别人朋友圈总喜欢给图片打一点马赛克,充满神秘感.准备用openCV来实现打码,其实足够模糊就能实现马赛克效果.查看API发现ImgProc模块提供四种模糊方法:高斯模糊 ...

  7. OpenCV之图片预处理方法

    一.图片预处理 OpenCV系列-本文底页有多个常用方法链接 1.1 边界填充(padding) 方法 : cv2.copyMakeBorder BORDER_REPLICATE:复制法,也就是复制最 ...

  8. 用 Opencv 和 Python 模糊检测

    用 Opencv 和 Python 模糊检测 在刚刚过去的这个周末,我坐下来想在 iphoto 中整理这些海量的照片.这不仅仅意味着巨大的工作量,因为我很快注意到一个现象--其中充斥着大量模糊的照片. ...

  9. python图像锐化_opencv实现图片模糊和锐化操作

    本文为大家分享了opencv图片模糊和锐化的具体实现代码,供大家参考,具体内容如下 一.模糊操作 #!/usr/bin/env python # _*_ coding:utf-8 _*_ import ...

  10. android 本地图片模糊,Android端图片模糊的实现原理及方案

    作者:牛栋凯 前言 图片模糊是Android客户端开发中一种比较常见的特效,诸如对话框背景半透明效果,头像背景模糊效果都是通过图片模糊技术实现的.本文主要介绍图片模糊的实现原理及实现方案. 图片模糊原 ...

最新文章

  1. UA MATH571A R语言回归分析实践 一元回归4 NBA球员的工资
  2. Python高级特性——迭代(Iteration)
  3. 我是最棒的,我一定会成功!
  4. 20日直播预告丨一则ORA-600案例分析
  5. WinForm与WebForm调试输出
  6. 兰亭集势笔试题:用最优方法从LinkedList列表中删除重复元素
  7. matlab设计椭圆低通滤波器,基于MATLAB的椭圆数字低通滤波器设计.doc
  8. 2020数据分析人才及CDA持证人行业报告
  9. 武汉大学计算机学院2018夏令营,武汉大学
  10. 如何解决——打印出的纸张黑底白字?
  11. BUUCTF Crypto BabyRSA
  12. 基于Kotlin、ViewModel、LiveData和LifeCycle开发的Readhub客户端
  13. RxSwift学习笔记
  14. App内嵌H5活动页面携带用户token
  15. c语言串口程序编写,用C语言编写串口程序
  16. JAVA学习总结(2)
  17. Java校招期望薪资_2019互联网校招薪资出炉,整体超越 BAT、华为
  18. 理论:引导过程与服务控制 (解决root密码忘记问题、不能正常开机)
  19. arcgis标注有的显示有的不显示
  20. ImportError: cannot import name ‘calinski_harabaz_score‘ from ‘sklearn.metrics‘

热门文章

  1. 利用R语言的GWmodel进行GWR模型分析(内含错误解决方法)
  2. 通达信 移动平均算法_【通达信指标】通达信主力偷偷建仓副图指标源码公式...
  3. c#用友U8API开发之环境搭建(1)
  4. ngrok跟小米球的使用
  5. 我的数据分析师转型之路,从零到字节跳动数据分析师
  6. steam授权_号商福利,Steam验号机器人上线,再也不用手动验号了
  7. geoda权重矩阵导入matlab,空间计量 用geoda创建空间权重矩阵
  8. 常用的oracle学习网站
  9. 基于java的铁路火车售票系统
  10. chrome插件开发入门实战——CSDN免登陆拷贝、免关注查看