cv2 之 图像阈值
ret,dst = cv2.threshhold(src,thresh,maxval,type)
src: 输入图,只能输入单通道图像,通常为灰度值
dst:输出图
thresh:阈值
maxval:当像素值超过了阈值(或者小于阈值,根据type来决定),所赋予的值
type:二值化操作类型,包含 以下5种类型:
cv2.THRESH_BINARY: 超过阈值部分取maxval,否则取0
cv2.THRESH_BINARY_INV : THRESH_BINARY 的反转
cv2.THRESH_TRUNC: 大于阈值部分设为阈值,否则不变
cv2.THRESH_TOZERO: 大于阈值部分不改变,否则设为0
cv2.THRESH_TOZERO_INV : THRESH_TOZERO 的反转
#直方图统计
cv2.calcHist(images,channels,mask,histSize,ranges)
images: 原图像图像格式为unit8,或float32,当传入函数时应该用[]括起来,例如[img]
channels:如果传入的图像是灰度值,那他的值就是[0],如果图像是彩色图像,传入的参数可以是[0][1][2],他们分别对应的是BGR
mask:掩码图像。统计整体图像的直方图它就是NONE,但如果只统计图像的某一部分,就制作一个掩码并使用他
histSize:BIN的数目,也应用[]括起来
ranges:像素的范围[0:255]
#直方图均衡化
img = cv2.imread('cat.jpg')
equ = cv2.equalizeHist(img) #均衡化
plt.show(equ.ravel(),256)
plt.show()
res = np.hstack((img,equ))
cv2.imshow('res',res)
#腐蚀与膨胀
kernel = np.ones((3,3),np.uint8)
erode = cv2.erode(img,kernel,iterations=1) #腐蚀
dilate = cv2.dilate(img,kernel,iterations=1)#膨胀
#开运算与闭运算
开:先腐蚀,后膨胀 毛刺去掉,线条恢复成原来的宽度,
img = cv2.imread('dog.jpg')
kernel = np.ones((5,5),np.uint8)
opening = cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)
cv2.imshow('dog',opening)
cv2.waitKey(0)
cv2.destroyAllWindows()
#闭运算 先膨胀在腐蚀 使得图像轮廓变得更光滑,与开操作相反,能弥合狭窄的间断和细小的沟壑,消除小的空洞,并填补轮廓线的裂痕
img=cv2.imshow('dog.jpg')
kernel = np.ones((5,5),np.uint8)
closing = cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel)
cv2.imshow('dog',closing)
cv2.waitKey(0)
cv2.destroyAllWindows()
#梯度运算
#梯度 = 膨胀 - 腐蚀
pie = cv2.imread('pie.jpg')
kernel = np.ones((7,7),np.uint8)
dilate = cv2.dilate(pie,kernel,iterations=5)
erosion = cv2.erode(pie,kernel,iterations=5)
res = np.hstack((dilate,erosion))
cv2.imshow('res',res)
cv2.waitKey(0)
cv2.destroyAllWindows()
gradient = cv2.morphologyEx(pie,MORPH_GRADIENT,kernel)
cv2.imshow('gradient',gradient)
cv2.waitKey(0)
cv2.destroyAllWindows()
#礼帽与黑帽
#礼帽 = 原始输入 - 开运算结果
#黑帽 = 闭运算 - 原始输入
img=cv2.imshow('dog.jpg')
kernel = np.ones((5,5),np.uint8)
tophat = cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel)
cv2.imshow('dog',tophat)
cv2.waitKey(0)
cv2.destroyAllWindows()
#黑帽
img=cv2.imshow('dog.jpg')
kernel = np.ones((5,5),np.uint8)
blackhat = cv2.morphologyEx(img,cv2.MORPH_BLACKHAT,kernel)
cv2.imshow('dog',blackhat)
cv2.waitKey(0)
cv2.destroyAllWindows()