图像平滑处理的几种常用方法:

  • 均值滤波
  • 归一化滤波
  • 高斯模糊
  • 中值滤波

平滑处理(模糊)的主要目的是去燥声:

不同的处理方式适合不同的噪声图像,其中高斯模糊最常用。

其实最重要的是对图像卷积的核的理解,核太大图像会失真,具体关于核的讲解点击传送门

图像噪声:引起较强视觉效果的孤立像素点或像素块。一般,噪声信号与要研究的对象不相关,它以无用的信息形式出现,扰乱图像的可观测信息。通俗的说就是噪声让图像不清楚。

废话不多说,直接上代码:

#均值滤波         //像素点等于周围N*N像素的平均值
img = cv.imread("E:/pictures/lenanoise.jpg")
blur = cv.blur(img,(7,7)) #res = cv.blur(src,核大小)
cv.imshow("orginal",img)
cv.imshow("blur",blur)
cv.waitKey()
cv.destroyAllWindows()

  (这是原图)

def blur(src, ksize, dst=None, anchor=None, borderType=None)
kSize:内核参数,其实就是图片进行卷积的时候相乘的那个矩阵,具体的卷积是如何算的,网上有很多,我这里就不介绍了,所得到的图像是模糊的,而且图像其实是按照原来的比例缺少了(原图像-内核参数+1)^2 个单元格
anchor:Point类型,即锚点,有默认值Point(-1,-1),当坐标为负值,就表示取核的中心。
borderType:Int类型,用于推断图像外部像素的某种边界模式,有默认值BORDER_DEFAULT.

方框滤波(归一化滤波):
#方框滤波                归一化处理
img = cv.imread("E:/pictures/lenanoise.jpg")
boxFiter = cv.boxFilter(img,-1,(5,5))
boxFiter2 = cv.boxFilter(img,-1,(5,5),normalize=False) #res = cv.boxFilter(src,图像深度,核大小,normalize属性)
cv.imshow("orginal",img) #图像深度一般设为-1表示和原图的深度一样
cv.imshow("boxFilter",boxFiter) #normalize->是否进行归一化处理
cv.imshow("boxFilter2",boxFiter2) #normalize属性有两个值TRUE和False,默认为TRUE
cv.waitKey() #(归一化)normalize为TRUE时和均值滤波一样,等于周围N*N个像素的平均值
cv.destroyAllWindows() #normalize为FALSE时,表示周围N*N个像素和,大于255的置为255

  


高斯模糊:

#高斯滤波         //周围N*N个像素的加权平均值
img = cv.imread("E:/pictures/lenanoise.jpg") #离中心点越近权重越大,越远权重越小
gassblur = cv.GaussianBlur(img,(9,9),0) #dst = cv.GaussianBlur(src,ksize,sigmax)
cv.imshow("orginal",img) #ksize->核大小(必须为奇数)3=3*3,5=5*5
cv.imshow("GaussianBlur",gassblur) #sigmax ->x方向方差(计算权重) ,一般设为0,由ksize推算,当然是由计算机完成的
cv.waitKey()
cv.destroyAllWindows() 在这种方法中,不使用由相同滤波器系数组成的盒式滤波器,而是使用高斯内核。 它使用函数cv2.GaussianBlur()完成。 我们应该指定内核的宽度和高度
,它应该是正数和奇数。 我们还应该分别指定X和Y方向的标准偏差sigmaX和sigmaY。 如果只指定sigmaX,则sigmaY等于sigmaX。 如果两者均为零,则从
内核大小进行计算。 高斯滤波非常有效地消除图像中的高斯噪声。



中值滤波:
#中值滤波              将n*n个像素排序后取中值作为新的像素值(核必须为奇数)
img = cv.imread("E:/pictures/lenanoise.jpg")
medianblur = cv.medianBlur(img,3) #dst = cv.medianBlur(src,ksize)
cv.imshow("orginal",img) #ksize->核大小,必须为奇数,如3,5,7...代表3*3,5*5....
cv.imshow("GaussianBlur",medianblur)
cv.waitKey()
cv.destroyAllWindows()

最新文章

  1. BZOJ1493 [NOI2007]项链工厂
  2. Pragma如何分组
  3. 在docker 中搭建gitlab环境
  4. 浏览器的中的 XMLHttpRequest 对象的使用
  5. 06-图1 List Components
  6. [转载]Spring Bean Definition Inheritance
  7. opencv 手写选择题阅卷 (四)Android端 手机应用开发
  8. 关于B/S系统中文件上传的大小限制怎么做
  9. 【转】NDK上建立自己的项目
  10. UVAlive3662 Another Minimum Spanning Tree 莫队算法
  11. IronPython 源码剖析系列(2):IronPython 引擎的运作流程
  12. cuda(2) 矩阵乘法优化过程
  13. boost中asio网络库多线程并发处理实现,以及asio在多线程模型中线程的调度情况和线程安全。
  14. destoon各栏目调用汇总
  15. python+appium 【已解决】真机运行appium报错“WebDriverException: Message: A new session could not be created. (Original error: Command failed: C:\Windows\system32\cmd.exe /s /c.......详见内文
  16. U-Boot内存管理
  17. Linux记录-lsof打开文件工具常用操作
  18. Swagger使用小记
  19. Cracking The Coding Interview3.3
  20. servlet、servlet容器和web应用程序的关系

热门文章

  1. 循序渐进Python3(十三) --0-- django之form表单
  2. Java虚拟机(一):JVM的运行机制
  3. 配置环境是程序员的第一步 -- Xshell 6 免费版下载安装
  4. SolrCloud中的文件与Collection管理
  5. 使用laravel实现用户的登陆
  6. 面试题:java实例变量,局部变量,类变量 背1
  7. Hyperledger子项目
  8. 多线程编程为什么要sleep
  9. CSS--抽屉(dig.chouti.com)页面
  10. sklearn scoring . xgboost.train . ---> rsme