OpenCV——07模糊操作
1.模糊操作
- 均值模糊
- 中值模糊
- 高斯模糊
- 自定义模糊
2.模糊操作的基本原理
1.基于离散卷积
2.定义好每个卷积核
3.不同的卷积核得到不同的卷积效果
4.模糊是卷积的一种表现
# -*- coding:utf-8 -*-
import cv2 as cv
import numpy as np
# 均值模糊——对随机噪声具有很好的去躁效果
def mean_blur_demo(image):
dst = cv.blur(image, (5, 5))
cv.imshow("mean_blur_demo", dst)
# 中值模糊——对椒盐噪声具有很好的去躁效果
def median_blur_demo(image):
dst = cv.blur(image, (5, 5))
cv.imshow("median_blur_demo", dst)
def clamp(pv):
if pv > 255:
return 255
if pv < 0:
return 0
else:
return pv
# 产生高斯噪声图像
def gaussian_noise(image):
h, w, c = image.shape
for row in range(h):
for col in range(w):
s = np.random.normal(0, 20, 3)
b = image[row, col, 0]
g = image[row, col, 1]
r = image[row, col, 2]
image[row, col, 0] = clamp(b + s[0])
image[row, col, 1] = clamp(g + s[1])
image[row, col, 2] = clamp(4 + s[2])
cv.imshow("gaussian_noise", image)
# 自定义模糊
def custom_blur_demo(image):
kernel = np.ones([5, 5], np.float32)/25 # 归一化,防止卷积操作过程中溢出
# kernel = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]], np.float32) # 锐化
dst = cv.filter2D(image, -1, kernel = kernel)
cv.imshow("custom_blur_demo", dst)
# 读取图片
src = cv.imread("D:\Python\Projects\OpenCV_toturial\images\lena.png")
src2 = cv.imread("D:\Python\Projects\OpenCV_toturial\images\lenanoise.png")
# 将图片放入指定名字的窗口中显示出来
cv.imshow("input image", src)
# mean_blur_demo(src)
# median_blur_demo(src2)
# custom_blur_demo(src)
gaussian_noise(src)
# 高斯模糊——对有高斯噪声的图像有抑制作用
dst = cv.GaussianBlur(src, (5, 5), 0)
cv.imshow("gaussian_blur", dst)
# 设置waitKey中的delay为0,程序会等待用户操作后关闭窗口
cv.waitKey(0)
cv.destroyAllWindows()
均值模糊:
中值模糊:
高斯模糊:
产生高斯噪声图:
高斯模糊抑制高斯噪声图: