参考文献:Python+OpenCV图像处理(一篇全)_E_vens-CSDN博客_基于python的opencv图像处理
图像平滑是一种区域增强算法,对图像进行一定的增强处理以减小噪声等带来的影响。
1、均值滤波 cv2.blur(image,(k,k))任一点的像素值,都是周围N*M个像素值的均值。
核越大,图像越模糊,核大小为(1,1)时,表示原图
import cv2 import numpy as np import matplotlib.pyplot as plt img = cv2.imread('F:\lovergos\OpenCV\Image27.jpg') # 原图 img = cv2.resize(img,None,fx=0.2,fy=0.2) # 图片太大,将其缩小,可省略 # 均值滤波 img1 = cv2.blur(img,(1,1)) img2 = cv2.blur(img,(50,50)) img3 = cv2.blur(img,(100,100)) img_names = ['origin','(1,1)','(50,50)','(100,100)'] images = [img,img1,img2,img3] for i in range(4): plt.subplot(2,2,i+1) plt.imshow(images[i],'gray') plt.title(img_names[i]) plt.xticks([]) plt.yticks([]) plt.show()
处理效果对比:
2、中值滤波 cv2.medianBlur(src,ksize)该点周围的像素点(包括本身),按次序排列,取中位数作为点的像素值。
注意:核必须是奇数;核越大,图片越模糊;相比于均值滤波,cv2.medianBlur(src,ksize)中ksize只需要填写一个数字即可。
img = cv2.imread('F:\lovergos\OpenCV\Image27.jpg') # 原图 img = cv2.resize(img,None,fx=0.2,fy=0.2) # 图片太大,将其缩小,可省略 # 中值滤波 img1 = cv2.medianBlur(img,1) img2 = cv2.medianBlur(img,45) img3 = cv2.medianBlur(img,101) img_names = ['origin','(1,1)','(45,45)','(101,101)'] images = [img,img1,img2,img3] for i in range(4): plt.subplot(2,2,i+1) plt.imshow(images[i],'gray') plt.title(img_names[i]) plt.xticks([]) plt.yticks([]) plt.show()
处理效果对比:
3、高斯滤波 cv2.GassianBlur(src,ksize,sigmaX)高斯平滑对图像进行平均时,不同位置的像素被赋予了不同的权重。高斯滤波让临近的像素具有更高的重要度,对周围像素计算加权平均值,较近的像素具有较大的权重。sigmaX为x方向方差,主要用来控制权重。
首先对原图添加椒盐噪声:
def salt_noise(origin_img,num): ''' :param origin_img: 原图 :param num: 添加噪声点的量 :return: noise_img ''' height,width = origin_img.shape[0],origin_img.shape[1] # 获取高和宽的像素值 for i in range(num): h = random.randint(0,height-1) w = random.randint(0,width-1) if random.randint(0,1) == 0: origin_img[h,w] = 0 else: origin_img[h,w] = 255 return origin_img origin_img = cv2.imread('F:\lovergos\OpenCV\Image27.jpg') # 原图 origin_img = cv2.resize(origin_img,None,fx=0.2,fy=0.2) img_noise = salt_noise(origin_img,100000)
添加噪声后的图像为:
采用不同的ksize及sigmax对噪声图像进行高斯平滑处理:
# 高斯平滑处理带噪声的图 img_gassian1 = cv2.GaussianBlur(img_noise,(5,5),0) img_gassian2 = cv2.GaussianBlur(img_noise,(15,15),0) img_gassian3 = cv2.GaussianBlur(img_noise,(5,5),10) cv2.imshow('img_gassian1',img_gassian1) cv2.imshow('img_gassian2',img_gassian2) cv2.imshow('img_gassian3',img_gassian3) cv2.waitKey(0) # img_names = ['img_noise','img_gassian1','img_gassian2','img_gassian3'] # images = [img_noise,img_gassian1,img_gassian2,img_gassian3] # for i in range(4): # plt.subplot(2,2,i+1) # plt.imshow(images[i],'gray') # plt.title(img_names[i]) # plt.xticks([]) # plt.yticks([]) # plt.show()
处理效果:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)