opencv简单的图像处理--新手入门(7)图像平滑处理

目录

图像平滑处理

1、均值滤波

2、方框滤波

3、高斯滤波

4、中值滤波


 

图像平滑处理

滤波处理主要是起到平滑图像,虑去噪声的功能

import cv2

img=cv2.imread("/Users/admin/Desktop/opencv/lenaNoise.png",1)
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

我们看一下面的图像,里面有很多白色的点,滤波就是要把这些噪声点去掉 

1、均值滤波

均值滤波采用线性的方法,平均整个窗口范围内的像素值

均值滤波本身存在着固有的缺陷,即它不能很好地保护图像细节,在图像去噪的同时也破坏了图像的细节部分,从而使图像变得模糊,不能很好地去除噪声点

import cv2

img=cv2.imread("/Users/admin/Desktop/opencv/lenaNoise.png",1)
blur = cv2.blur(img, (3, 3))

cv2.imshow('original', img)
cv2.imshow('blur', blur)
cv2.waitKey(0)
cv2.destroyAllWindows()

blur函数只有两个参数,第一个参数是原始图像,第二个参数是要用周围多大的范围进行计算均值,一般是3*3或者5*5 

通过均值滤波后,噪声点确实不是很明显了,但是原图也变得模糊了

2、方框滤波

boxFilter(原始图像,目标图像深度,核大小,normalize属性)

目标图像深度一般为-1,表示与原始图像保持一致

核大小就是对周围取值的范围

normalize属性:是否进行归一化处理,归一化代表取均值=均值滤波;不进行归一化的话就是取和,容易溢出,就是和很容易大于255

import cv2

img=cv2.imread("/Users/admin/Desktop/opencv/lenaNoise.png",1)
box1 = cv2.boxFilter(img,-1,(3,3), normalize=True)  
box0 = cv2.boxFilter(img,-1,(3,3), normalize=False)
cv2.imshow('original', img)
cv2.imshow('box1', box1)
cv2.imshow('box0', box0)
cv2.waitKey(0)
cv2.destroyAllWindows()

不进行归一化处理的box0图像很多缺失了,因为和大于255显示为白色

3、高斯滤波

 高斯模糊的卷积核里的数值是满足高斯分布,相当于更重视中间的

让临近的像素具有更高的重要度,对周围的像素计算加权平均值,较近的像素具有较大的权重

GaussianBlur(str,ksize,sigmax)

str:原始图像

ksize:核大小,必须是奇数

sigmax:X方向的方差,控制权重,一般取0,自动根据核大小计算

import cv2

img=cv2.imread("/Users/admin/Desktop/opencv/lenaNoise.png",1)
Gaussian = cv2.GaussianBlur(img, (5, 5), 1) 
cv2.imshow('original', img)
cv2.imshow('Gaussian', Gaussian)
cv2.waitKey(0)
cv2.destroyAllWindows()

4、中值滤波

相当于用中值代替

medianBlur(img, Ksize)

Ksize:核大小,必须是大于1的奇数

import cv2

img=cv2.imread("/Users/admin/Desktop/opencv/lenaNoise.png",1)
median = cv2.medianBlur(img, 5) 
cv2.imshow('original', img)
cv2.imshow('median', median)
cv2.waitKey(0)
cv2.destroyAllWindows()

我们发现处理结果比之前的要好很多

猜你喜欢

转载自blog.csdn.net/Andy_shenzl/article/details/86573297
今日推荐