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])
  • 相关阅读:
    java web 自定义错误页面 完整jsp错误页面代码(同时写错误日志) error.jsp
    linux ps命令详解
    Cocos2d-x MultipleTouch & CCControllButton's confusion
    android 处理图片之--bitmap处理
    JBoss 目录结构
    如何将Android默认的Camra程序导入到eclipse中
    SGU107——987654321 problem
    解析Systemtap
    csdn 刷分小工具(刷了1000多被封了,慎用)
    OpenCV——基本图形绘制(椭圆、圆、多边形、直线、矩形)
  • 原文地址:https://www.cnblogs.com/XJT2018/p/9944995.html
Copyright © 2011-2022 走看看