13、图像二值化

二值,即0和1,其实是灰度图像的0~255的简版,0表示白色,1表示黑色

图像二值化方法:全局阈值,局部阈值

13、图像二值化_第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)
13、图像二值化_第2张图片
阈值:185.0

二、Triangle(多用于直方图只有单个波峰的图像,如细胞)

ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_TRIANGLE)
13、图像二值化_第3张图片
阈值:249.0

三、自定义全局阈值

ret, binary = cv.threshold(gray, 127, 255, cv.THRESH_BINARY) 
#阈值为127,但后面不能再加上OTSU,或者Triangle
13、图像二值化_第4张图片
image.png
ret, binary = cv.threshold(gray, 127, 255, cv.THRESH_BINARY_INV)
#cv.THRESH_BINARY_INV:黑白调换
13、图像二值化_第5张图片
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)
13、图像二值化_第6张图片
blockSize = 25
13、图像二值化_第7张图片
blockSize = 127

二、高斯自适应,需要有高斯权重,越中心,权重越大

binary = cv.adaptiveThreshold(gray, 255, cv.ADAPTIVE_THRESH_GAUSSIAN_C, cv.THRESH_BINARY, 25, 10)
cv.imshow("GAUSSIAN Mean", binary)
13、图像二值化_第8张图片
高斯Mean

可用于识别文字

13、图像二值化_第9张图片
image.png
2019-01-05 22-49-10 的屏幕截图.png

你可能感兴趣的:(13、图像二值化)