目录
#图像阈值操作
#图片平滑处理
##均值滤波
##方框滤波
##高斯滤波
#中值滤波
#ret,dst = cv2.threshold(src,thresh,maxval,type)
#src:输入图,只能输入单通道图像,通常来说为灰度图像
#dst:输出图
#thresh:阈值
#maxval:当橡树值超过了阈值(或者小于阈值,根据type来决定),所赋的值
#type:二值化操作类型:
cv2.THRESH_BINARY(超过阈值部分取maxval(最大值),否则取0)
cv2.THRESH_BINARY_INV(上面的反转)
cv2.THRESH_TRUNC(大于于阈值部分设为阈值,否则不变)
cv2.THRESH_TOZERO(大于阈值部分不改变,否则设为0)
cv2.THRESH_TOZERO_INV(上述反转)
#ret =return
img=cv2.imread('vivo50.jpg',cv2.COLOR_BGR2RGB)
img_gray = cv2.imread('vivo50.jpg', cv2.IMREAD_GRAYSCALE)
ret,thresh1 = cv2.threshold(img_gray,127,255,cv2.THRESH_BINARY)
ret,thresh2 = cv2.threshold(img_gray,127,255,cv2.THRESH_BINARY_INV)
ret,thresh3 = cv2.threshold(img_gray,127,255,cv2.THRESH_TRUNC)
ret,thresh4 = cv2.threshold(img_gray,127,255,cv2.THRESH_TOZERO)
ret,thresh5 = cv2.threshold(img_gray,127,255,cv2.THRESH_TOZERO_INV)
titles = ['Original','BINARY','BINARY_INV','TRUNG','TOZERO','TOZERO_INV']
images = [image,thresh1,thresh2,thresh3,thresh4,thresh5]
for i in range(6):
plt.subplot(2,3,i+1),plt.imshow(images[i],'gray')
plt.title(titles[i])
plt.xticks([]),plt.yticks([])
plt.show()
图像由许多的像素点组成,平滑处理的原理就是将规定区域内的像素值进行平均卷积操作
原图为增加了椒盐噪声的表现
均值滤波即对特定卷积核大小内的像素进行均值卷积化的操作,所采用的是cv2.blur(img,(h,w))
#均值滤波
#简单的平均卷积操作
blur = cv2.blur(img1,(3,3))
结果显示为:
利用cv2.boxFilter(img,-1,(h,w),normalizer=True)
#方框滤波
#基本和均值一样,可以选择归一化,但容易越界(75+204=279)
box = cv2.boxFilter(img1,-1,(3,3),normalize=False)
#-1表示计算结果与颜色通道一致,False>不除3*3了,直接取255
#(3,3)表示卷积核
#normalize归一化
cv2.imshow('box',box)
cv2.waitKey(0)
cv2.destroyAllWindows()
plt.imshow(box)
plt.show()
方框滤波表现为:
高斯滤波利用cv2.GaussianBlur(img,(h,w),1)
#高斯滤波
#高斯模糊的卷积核里的数值是满足高斯分布的,相当于更重视中间
aussian = cv2.GaussianBlur(img1,(5,5),1)
cv2.imshow('aussian',aussian)
cv2.waitKey(0)
cv2.destroyAllWindows()
plt.imshow(blur)
plt.show()
高斯滤波的表现为:
#中值滤波
#相当于用中值代替
median = cv2.medianBlur(img1,5)
cv2.imshow('median',median)
cv2.waitKey(0)
cv2.destroyAllWindows()
plt.imshow(median)
plt.show()
对比下来,可以看见,中值滤波消除椒盐噪点的能力更强,但是图片清晰度也有所下降。