zoukankan      html  css  js  c++  java
  • [python-opencv]超大图像二值化方法

    *分块

    *全局阈值 VS 局部阈值

     1 import cv2 as cv
     2 import numpy as np
     3 
     4 def big_image_binary(image):
     5     print(image.shape)
     6     cw = 213
     7     ch = 547
     8     h,w = image.shape[:2]
     9     gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
    10     for row in range(0,h,ch):
    11         for col in range(0,w,cw):
    12             roi = gray[row:row+ch,col:col+cw]    #进行分块
    13             print(np.std(roi),np.mean(roi))
    14             #全局阈值方法
    15             # ret,dst = cv.threshold(roi,127,256,cv.THRESH_BINARY|cv.THRESH_OTSU)
    16             # gray[row:row + ch, col:col + cw] = dst
    17 
    18             # 全局阈值过滤噪点方法
    19             if np.std(roi) < 20:
    20                 gray[row:row + ch, col:col + cw] = 255     #块的二维数组平方差小于20时 将其设为255-变白
    21             else:
    22                 ret,dst = cv.threshold(roi,127,256,cv.THRESH_BINARY|cv.THRESH_OTSU)
    23                 gray[row:row + ch, col:col + cw] = dst
    24 
    25             #局部阈值方法
    26             # dst = cv.adaptiveThreshold(roi,255,cv.ADAPTIVE_THRESH_GAUSSIAN_C,cv.THRESH_BINARY,127,20)
    27             # gray[row:row + ch, col:col + cw] = dst
    28             # print(np.std(dst),np.mean(dst))   #np.std(dst)计算矩阵的标准差 np.mean(dst) 均值
    29 
    30     cv.imwrite('new_big_image3.jpg',gray)
    31 
    32 src = cv.imread('BigImage_Binary1.jpg')
    33 # cv.namedWindow('input_image',cv.WINDOW_AUTOSIZE)
    34 # cv.imshow('input_image',src)
    35 
    36 big_image_binary(src)
    37 
    38 cv.waitKey(0)
    39 cv.destroyAllWindows()

    原图:

     

    全局阈值效果:

     

    全局阈值过滤掉噪点效果:【上一张图全局阈值右边还有噪点  过滤后噪点消失】

     

    高斯C方法局部阈值效果:

     

    补充知识点:

    #np.std()  标准差 
    #np.mean() 均值
    >>> a = np.array([[1, 2], [3, 4]])  
    >>> np.std(a) # 计算矩阵全局标准差  
    1.1180339887498949
    >>> np.std(a) # 计算矩阵全局标准差
    2.5
    >>> np.std(a, axis=0) # axis=0计算每一列的标准差  
    array([ 1., 1.])
    >>> np.std(a, axis=1) # 计算每一行的标准差 array([ 0.5, 0.5])
  • 相关阅读:
    iOS UI(布局)约束是什么?view1.attr1 = view2.attr2 * multiplier + constant
    编程范式-声明式编程
    平庸的投资人和优秀的投资人差在哪儿
    编程语言的发展趋势及未来方向
    再读:编程语言的发展趋势及未来方向
    编程语言的发展趋势:声明式动态并发
    命令式编程与声明式编程
    声明式(编程)语言是解释型语言
    DSL-领域特定语言(英语:domain-specific language、DSL)
    声明式编程
  • 原文地址:https://www.cnblogs.com/XJT2018/p/9944995.html
Copyright © 2011-2022 走看看