本文主要讲述了图像预处理的一些工作,分为图像灰度化、图像滤波以及图像二值化。其中,图像滤波部分 分别实现了中值滤波,高斯滤波,均值滤波和双边滤波。程序如下:
import cv2
import matplotlib.pyplot as plt
def gray(img):
image_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
return image_gray
def filtering(a=0):
if a==0:
img_handle = cv2.blur(image_gray, (5, 5)) # 均值滤波
elif a==1:
img_handle = cv2.GaussianBlur(image_gray, (5, 5), 0) # 高斯滤波
elif a==2:
img_handle = cv2.medianBlur(image_gray, 5) # 中值滤波
else:
img_handle = cv2.bilateralFilter(image_gray, 9, 75, 75) # 双边滤波
return img_handle
if __name__ == '__main__':
path = r"C:\Users\14360\Desktop\(3).jpg"
img = cv2.imread(path)
image_gray = gray(img) #图像灰度化
picture = []
titles = ['srcImg', 'mean', 'Gaussian', 'median', 'bilateral']
for i in range(5):
img_filter = filtering(i) #图像滤波
picture.append(1) # 可解决如下报错IndexError: list assignment index out of range
otsuThe, picture[i] = cv2.threshold(img_filter, 0, 255, cv2.THRESH_OTSU) #OSTU阈值算法
plt.subplot(2, 3, i + 1) # 注意,这和matlab中类似,没有0,数组下标从1开始
plt.imshow(picture[i])
plt.title(titles[i])
plt.show()
PS:程序已经运行并跑通。