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])
  • 相关阅读:
    jquery更改输入框type为密码框password
    用table做网页,设置了border为1px怎么还是觉得很粗?
    键盘按钮keyCode大全
    兼容firefox的 keyCode
    php生成随机字符串和验证码的类
    asp.net多图片上传实现程序代码
    asp.net图片上传实例
    纯js分页代码(简洁实用)
    jQuery中读取json文件示例代码
    perl编程中的map函数示例
  • 原文地址:https://www.cnblogs.com/XJT2018/p/9944995.html
Copyright © 2011-2022 走看看