本文共 2283 字,大约阅读时间需要 7 分钟。
运动模糊
import cv2import numpy as npfrom matplotlib import pyplot as pltdef motion_blur(image, degree=50, angle=45): image = np.array(image) # 这里生成任意角度的运动模糊kernel的矩阵, degree越大,模糊程度越高 M = cv2.getRotationMatrix2D((degree / 2, degree / 2), angle, 1) motion_blur_kernel = np.diag(np.ones(degree)) motion_blur_kernel = cv2.warpAffine(motion_blur_kernel, M, (degree, degree)) motion_blur_kernel = motion_blur_kernel / degree #使用2D卷积 blurred = cv2.filter2D(image, -1, motion_blur_kernel) # convert to uint8 cv2.normalize(blurred, blurred, 0, 255, cv2.NORM_MINMAX) blurred = np.array(blurred, dtype=np.uint8) return blurredimg = cv2.imread('Lighthouse.jpg')res = motion_blur(img)plt.subplot(121),plt.imshow(img),plt.title('original'),plt.xticks([]),plt.yticks([])plt.subplot(122),plt.imshow(res),plt.title('moving'),plt.xticks([]),plt.yticks([])plt.show()平均模糊 这是通过将图像与归一化框滤镜进行卷积来完成的。它仅获取内核区域下所有像素的平均值,并 替换中心元素。
import cv2import numpy as npfrom matplotlib import pyplot as pltimg = cv2.imread('logo.jpg')blur = cv2.blur(img,(5,5))plt.subplot(121),plt.imshow(img),plt.title('original'),plt.xticks([]),plt.yticks([])plt.subplot(122),plt.imshow(blur),plt.title('blured'),plt.xticks([]),plt.yticks([])plt.show()高斯模糊
import cv2import numpy as npfrom matplotlib import pyplot as pltimg = cv2.imread('logo.jpg')blur = cv2.GaussianBlur(img,(5,5),0)plt.subplot(121),plt.imshow(img),plt.title('original'),plt.xticks([]),plt.yticks([])plt.subplot(122),plt.imshow(blur),plt.title('gaussian_blured'),plt.xticks([]),plt.yticks([])plt.show()中位模糊 向原始图像添加了90%的噪声并应用了中值模糊。
import cv2import numpy as npfrom matplotlib import pyplot as pltimg = cv2.imread('logo.jpg')blur = cv2.medianBlur(img,9)plt.subplot(121),plt.imshow(img),plt.title('original'),plt.xticks([]),plt.yticks([])plt.subplot(122),plt.imshow(blur),plt.title('gaussian_blured'),plt.xticks([]),plt.yticks([])plt.show()双边滤波 去除噪声的同时保持边缘清晰锐利非常有效
import cv2import numpy as npfrom matplotlib import pyplot as pltimg = cv2.imread('Lighthouse.jpg')blur = cv2.bilateralFilter(img,12,75,75)#参数介绍,图像,领域直径,颜色空间的标准方差,坐标空间的标准方差plt.subplot(121),plt.imshow(img),plt.title('original'),plt.xticks([]),plt.yticks([])plt.subplot(122),plt.imshow(blur),plt.title('bilateralFilter'),plt.xticks([]),plt.yticks([])plt.show()
效果不明显,图片不合适
转载地址:http://uhben.baihongyu.com/