二值,即0和1,其实是灰度图像的0~255的简版,0表示白色,1表示黑色
图像二值化方法:全局阈值,局部阈值
image.png
全局阈值
一、OTSU
def threshold_funtion(image):
'''
全局阈值
'''
gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)
print("阈值:%s"%ret)
cv.imshow("OTSU",binary)
阈值:185.0
二、Triangle(多用于直方图只有单个波峰的图像,如细胞)
ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_TRIANGLE)
阈值:249.0
三、自定义全局阈值
ret, binary = cv.threshold(gray, 127, 255, cv.THRESH_BINARY)
#阈值为127,但后面不能再加上OTSU,或者Triangle
image.png
ret, binary = cv.threshold(gray, 127, 255, cv.THRESH_BINARY_INV)
#cv.THRESH_BINARY_INV:黑白调换
image.png
局部阈值(自适应阈值)
一、C mean自适应,将图像分成一个个小方格,然后每个方格的均值与自定义的均值比较。
def local_threshold_function(image):
gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
'''
cv.adaptiveThreshold:
blockSize = 25,即自定义阈值,必须是基数
C = 10,即每个方格的均值减去自定义均值大于10,即为白色;否则为黑色
'''
binary = cv.adaptiveThreshold(gray, 255, cv.ADAPTIVE_THRESH_MEAN_C, cv.THRESH_BINARY, 127, 10)
cv.imshow("C Mean", binary)
blockSize = 25
blockSize = 127
二、高斯自适应,需要有高斯权重,越中心,权重越大
binary = cv.adaptiveThreshold(gray, 255, cv.ADAPTIVE_THRESH_GAUSSIAN_C, cv.THRESH_BINARY, 25, 10)
cv.imshow("GAUSSIAN Mean", binary)
高斯Mean
可用于识别文字
image.png
2019-01-05 22-49-10 的屏幕截图.png