zoukankan      html  css  js  c++  java
  • Python+OpenCV图像处理之超大图像二值化

    (一)分块处理超大图像的二值化问题

    python实现,包括全局阈值和局部阈值方法

    import cv2
    import numpy as np
    
    
    __author__ = "boboa"
    
    
    def big_image_demo(image):
        print(image.shape)
        # 分成小块,宽高
        cw = 256
        ch = 256
        h, w = image.shape[:2]
        gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
        for row in range(0, h, ch):
            for col in range(0, w, cw):
                roi = gray[row:row + ch, col:col + cw]  # 获取分块
                # ret, dst = cv2.threshold(roi,0,255,cv2.THRESH_BINARY|cv2.THRESH_OTSU)   #全局阈值
                dst = cv2.adaptiveThreshold(roi, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 127, 20) # 局部阈值
                gray[row:row + ch, col:col + cw] = dst  # 分块覆盖
                print(np.std(dst), np.mean(dst))
        cv2.imwrite("image/result_bigimage.jpg", gray)
    
    
    
    if __name__ == "__main__":
        img = cv2.imread("image/big.jpg")
        cv2.namedWindow("input image", cv2.WINDOW_AUTOSIZE)
        cv2.imshow("input image", img)
        big_image_demo(img)
        cv2.waitKey(0)
        cv2.destroyAllWindows()

    原图

    全局阈值效果较差

     局部阈值效果较好

    (二)图像ROI与空白区域过滤

    python实现

    import cv2
    import numpy as np
    
    
    __author__ = "boboa"
    
    
    def big_image_demo(image):
        print(image.shape)
        # 分成小块,宽高
        cw = 256
        ch = 256
        h, w = image.shape[:2]
        gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
        for row in range(0, h, ch):
            for col in range(0, w, cw):
                roi = gray[row:row + ch, col:col + cw]  # 分块区域
                # 获取图像的标准差和平均值  
                print(np.std(roi), np.mean(roi))
                dev = np.std(roi)  # 计算像素的标准差 
                if dev < 15:
                    # 如果像素的标准差小于某一阈值 我们就理解这个区域的图像变化不大,即黑白区间不明显,我们全部赋值为255
                    gray[row:row + ch, col:col + cw] = 255
                else:
                    ret, dst = cv2.threshold(roi, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
                    gray[row: row + ch, col: col + cw] = dst
        cv2.imwrite("image/result_bigimage.jpg", gray)
    
    if __name__ == "__main__":
        img = cv2.imread("image/big.jpg")
        cv2.namedWindow("input image", cv2.WINDOW_AUTOSIZE)
        cv2.imshow("input image", img)
        big_image_demo(img)
        cv2.waitKey(0)
        cv2.destroyAllWindows()

    运行结果,可以看出过滤之后,效果有所改善

  • 相关阅读:
    Bzoj 1010: [HNOI2008]玩具装箱toy(斜率优化)
    Cogs 376. [IOI2002]任务安排(后效性DP)
    Bzoj 1911: [Apio2010]特别行动队(斜率优化)
    Poj 2018 Best Cow Fences(分数规划+DP&&斜率优化)
    Bzoj 1212: [HNOI2004]L语言(AC自动机+DP)
    ZOJ 3228 Searching the String(AC自动机)
    Bzoj 3172: [Tjoi2013]单词(fail树)
    Hdu 3065 病毒侵袭持续中(AC自动机)
    Hdu 2896 病毒侵袭(AC自动机)
    Bzoj 2599: [IOI2011]Race(点分治)
  • 原文地址:https://www.cnblogs.com/qianxia/p/11096304.html
Copyright © 2011-2022 走看看