10、OpenCV Python 图像二值化

__author__ = "WSX"
import cv2 as cv
import numpy as np
#-----------二值化(黑0和白 255)-------------
#二值化的方法(全局阈值  局部阈值(自适应阈值))
# OTSU
#cv.THRESH_BINARY 二值化
#cv.THRESH_BINARY_INV(黑白调换)
#cv.THRES_TRUNC 截断

def threshold(img):  #全局阈值
    gray = cv.cvtColor(img , cv.COLOR_BGR2GRAY)  #首先变为灰度图
    ret , binary = cv.threshold( gray , 0, 255 , cv.THRESH_BINARY |cv.THRESH_OTSU)#cv.THRESH_BINARY |cv.THRESH_OTSU 根据THRESH_OTSU阈值进行二值化  cv.THRESH_BINARY_INV(黑白调换)
    #上面的0 为阈值 ,当cv.THRESH_OTSU 不设置则 0 生效
    #ret 阈值 , binary二值化图像
    print("阈值:", ret)
    cv.imshow("binary", binary)

def own_threshold(img): #自己设置阈值100            全局
    gray = cv.cvtColor(img , cv.COLOR_BGR2GRAY)  #首先变为灰度图
    ret , binary = cv.threshold( gray , 100, 255 , cv.THRESH_BINARY )#cv.THRESH_BINARY |cv.THRESH_OTSU 根据THRESH_OTSU阈值进行二值化
    #上面的0 为阈值 ,当cv.THRESH_OTSU 不设置则 0 生效
    #ret 阈值 , binary二值化图像
    print("阈值:", ret)
    cv.imshow("binary", binary)

def local_threshold(img):  #局部阈值
    gray = cv.cvtColor(img , cv.COLOR_BGR2GRAY)  #首先变为灰度图
    binary = cv.adaptiveThreshold( gray ,255 , cv.ADAPTIVE_THRESH_GAUSSIAN_C , cv.THRESH_BINARY, 25 , 10,)#255 最大值
    #上面的 有两种方法ADAPTIVE_THRESH_GAUSSIAN_C (带权重的均值)和ADAPTIVE_THRESH_MEAN_C(和均值比较)
    #blockSize 必须为奇数 ,c为常量(每个像素块均值 和均值比较 大的多余c。。。少于c)
    #ret 阈值 , binary二值化图像
    cv.imshow("binary", binary)

def custom_threshold(img):  #自己计算均值二值化
    gray = cv.cvtColor(img , cv.COLOR_BGR2GRAY)  #首先变为灰度图
    h ,w = gray.shape[:2]
    m = np.reshape( gray ,[1 ,w+h])
    mean = m.sum() / w*h  #求出均值
    binary = cv.threshold(gray, mean, 255, cv.THRESH_BINARY )
    cv.imshow("binary", binary)


def main():
    img = cv.imread("1.JPG")
    cv.namedWindow("Show", cv.WINDOW_AUTOSIZE)
    cv.imshow("Show", img)
    #own_threshold(img)
    own_threshold(img)
    cv.waitKey(0)
    cv.destroyAllWindows()

main()
原文地址:https://www.cnblogs.com/WSX1994/p/9151464.html