zoukankan      html  css  js  c++  java
  • 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()
  • 相关阅读:
    勇气
    Node.js的安装和配置
    jekins构建时,远程执行shell的问题
    CDMA系统原理二
    详解Android定位
    Docker 简介
    Polly+HttpClientFactory
    K8s-Helm
    k8s-部署应用
    K8S-Pod
  • 原文地址:https://www.cnblogs.com/WSX1994/p/9151464.html
Copyright © 2011-2022 走看看