对图片进行模糊操作、高斯模糊
import numpy as npimport cv2 as cvfrom matplotlib import pyplot as plt# 2d卷积def juanji():img = cv.imread('images/ly.jpg')image2 = cv.cvtColor(img, cv.COLOR_BGR2RGB)# 返回一个全1的N维数租 返回取平均值# 然后替换中心值# 保持这个内核在一个像素上,将所有低于这个内核的25个像素相加,取其平均值,然后用新的平均值替换中心像素kernel = np.ones((5, 5), np.float32) / 25# 当第二个参数为-1 输出图像与原图像有相同的深度dst = cv.filter2D(image2, -1, kernel)plt.subplot(121), plt.imshow(image2, "gray"), plt.title('Original')plt.xticks([]), plt.yticks([])plt.subplot(122), plt.imshow(dst, "gray"), plt.title('Averaging')plt.xticks([]), plt.yticks([])plt.show()# 平均值def avg():img = cv.imread("images/ly.jpg", -1)# (5,5)是指内核的宽度和高度 获取5/5矩阵内的平均值blur = cv.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('Blurred')plt.xticks([]), plt.yticks([])plt.show()# 高斯模糊def gaosimohu():images = cv.imread("images/ly.jpg", -1)# (5,5)是指内核的宽度和高度 获取5/5矩阵内的平均值# 第一个参数为源地址 第二个参数表示内核的高度跟宽度 必须为正数且奇数# 第三个参数X和Y的标准偏差 如果指定了x的指那么 y的值也是一样的img = cv.cvtColor(images, cv.COLOR_BGR2RGB)blur = cv.GaussianBlur(img, (9, 9), 9)plt.subplot(121), plt.imshow(img), plt.title('Original')plt.xticks([]), plt.yticks([])plt.subplot(122), plt.imshow(blur), plt.title('Blurred')plt.xticks([]), plt.yticks([])plt.show()# 中位模糊def mediaMohu():img = cv.imread("images/ly.jpg", -1)images = cv.cvtColor(img, cv.COLOR_BGR2RGB)# 5 表示核大小 应为奇数字# 中位 模糊的意思 按照核大小 排序 取排序后的值替代掉中间点的位置# 如果核心为3x3 那么就是在这个核当中 3x3 排序 排序完的中间值替换掉以前的中心值blur = cv.medianBlur(images, 5)plt.subplot(121), plt.imshow(images)plt.subplot(122), plt.imshow(blur)plt.show()if __name__ == '__main__':# avg()# gaosimohu()mediaMohu()
