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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM