import cv2
import numpy as np

img = cv2.imread('logo.png')
img1 = cv2.imread('logo1.png')
img2 = cv2.imread('pic6.PNG')
# 图像模糊,图像平滑
# 平均
# 高斯模糊
# 中值模糊
# 双边滤波

blur1 = cv2.blur(img, (5, 5))
blur2 = cv2.blur(img, (5, 5), 0)
median = cv2.medianBlur(img1, 5)
blur3 = cv2.bilateralFilter(img2, 9, 75, 75)

cv2.imshow('img', img)
cv2.imshow('img2', img2)
cv2.imshow('blur3', blur3)

cv2.imshow('img1', img1)
cv2.imshow('blur1', blur1)
cv2.imshow('blur2', blur2)
cv2.imshow('median', median)


cv2.waitKey(0)
cv2.destroyAllWindows()

python 图片部分模糊 python图像去模糊_双边滤波


图像平滑
使用低通滤波可以去除图像中的高频成分,如噪声和边界。所以图像的边界也会被模糊,也有一些模糊的方法不会模糊边界。在opencv中有四种方法进行平滑

均值
使用卷积框中的像素平均值代替该像素。可以使用cv2.blur和cv2.boxFilter函数完成。需要设定卷积框的宽度和高度。

高斯模糊
把卷积的核换成高斯核,也就是方框不变,矩阵中的值符合高斯分布,方框中心值最大,其余值与随着距离中心越远,值越小。类似于一个凸起。原来的求平均数方法变成加权平均数。函数使用 cv2.GaussianBlur,需要制定奇数的宽度和高度,以及沿着x和y方向的标准差。如果仅制定了x方向的标准差,y方向会取相同值。如果标准差都是0,函数会根据核函数大小自行计算。
可以使用cv2.getGaussianKernel函数自己构建高斯核。

 

中值滤波
用卷积框对应像素的中值代替中心像素值。该方法可以去除椒盐噪声。卷积核大小应该是奇数

双边滤波
双边滤波可以保证图像边界清晰的情况下去除噪音,但是速度较慢。高斯滤波只考虑像素之间的空间关系,不考虑像素之间的值关系,所以会模糊掉边界。双边滤波同时使用空间高斯权重和灰度值相似的高斯权重值。空间高斯数只确保邻近区域像素对中心的影响,灰度相似高斯函数确保只有与中心像素灰度值接近才会用来实现模糊运算。所以该方便不会模糊边界,因为边界灰度值变换较大。