Opencv Python版学习笔记07.图像平滑

img = cv2.imread('lenaNoise.png')

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

可以看出这张图片有非常多的噪点。现使用滤波的操作使图像平滑,从而去掉噪点。 

 Opencv Python版学习笔记07.图像平滑_第1张图片

# 均值滤波
# 简单的平均卷积操作
blur = cv2.blur(img, (3, 3))

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

经过均值滤波之后,可以看出噪点少了,但仍然有部分噪点。 

Opencv Python版学习笔记07.图像平滑_第2张图片 

# 方框滤波
# 基本和均值一样,可以选择归一化
box = cv2.boxFilter(img,-1,(3,3), normalize=True)  

cv2.imshow('box', box)
cv2.waitKey(0)
cv2.destroyAllWindows()

使用归一化的方框滤波效果与均值滤波一致。 

 Opencv Python版学习笔记07.图像平滑_第3张图片

# 方框滤波
# 基本和均值一样,可以选择归一化,容易越界
box = cv2.boxFilter(img,-1,(3,3), normalize=False)  

cv2.imshow('box', box)
cv2.waitKey(0)
cv2.destroyAllWindows()

不进行归一化的方框滤波会造成越界,从而使整个图片白化。 

Opencv Python版学习笔记07.图像平滑_第4张图片 

# 高斯滤波
# 高斯模糊的卷积核里的数值是满足高斯分布,相当于更重视中间的
aussian = cv2.GaussianBlur(img, (5, 5), 1)  

cv2.imshow('aussian', aussian)
cv2.waitKey(0)
cv2.destroyAllWindows()

高斯滤波效果比均值滤波效果好点,但仍然有部分噪点。 

Opencv Python版学习笔记07.图像平滑_第5张图片 

# 中值滤波
# 相当于用中值代替
median = cv2.medianBlur(img, 5)  # 中值滤波

cv2.imshow('median', median)
cv2.waitKey(0)
cv2.destroyAllWindows()

由图片可以看出,中值滤波的效果特别的好,经过平滑处理的图片几乎没有了噪点。 

 Opencv Python版学习笔记07.图像平滑_第6张图片

# 展示所有的
res = np.hstack((blur,aussian,median))
#print (res)
cv2.imshow('median vs average', res)
cv2.waitKey(0)
cv2.destroyAllWindows()

以下为三种平滑处理的效果对比图 

你可能感兴趣的:(Opencv Python版学习笔记07.图像平滑)