OpenCV学习笔记:图像阈值化与平滑处理

目录

#图像阈值操作

#图片平滑处理

##均值滤波

##方框滤波

##高斯滤波

#中值滤波


#图像阈值操作

    #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()

对比下来,可以看见,中值滤波消除椒盐噪点的能力更强,但是图片清晰度也有所下降。 

猜你喜欢

转载自blog.csdn.net/Crabfishhhhh/article/details/127621036