欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【OpenCV3.3+Python3.6】超大图像二值化方法

程序员文章站 2024-03-25 11:15:58
...

超大图像二值化方法

顾名思义,超大图像二值化方法就是处理比较大的一些图像,

先对图片进行分块,然后进行二值化处理,二值化可以分为2种全局阈值二值化与局部阈值二值化处理

1.全局阈值二值化处理:

ret,dst=cv2.threshold(roi,0,255,cv.THRESH_BINARY|cv.THRESH_OTSU)#全局阈值

具体用法可以参考之前博客    【OpenCV3.3+Python3.6】图像二值化处理函数cv2.threshold

2局部阈值二值化处理:

binary = cv2.adaptiveThreshold(src,maxvalue,adaptiveMethod,thresholdType,blockSize,C)  #局部阈值

参数说明:

(1)src:原图像,要进行二值化处理的图像

(2)maxValue:设置的最大值

(3)adaptiveMethod:指定的阈值计算方法,

               cv2.ADAPTIVE_THRESH_MEAN_C:阈值取自相邻区域的平均值;

               cv2.ADAPTIVE_THRESH_GAUSSIAN_C:阈值取自相邻区域的加权和,权重为一个高斯窗口。

(4)thresholdType:跟threshold()方法中一样,有cv2.THRESH_BINARY、cv2.THRESH_BINARY_INV等值

(5)blockSize:邻域大小

(6)C:一个常数,阈值等于平均值或加权平均值减去该常数
 

返回的是binary,二值化处理之后的图像

 

代码奉上:

# 超大图像二值化方法
#     分块
#     全局阈值Vs局部阈值


import cv2
import numpy as np

def big_image_binary(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:cw+col]
            ret, dst=cv2.threshold(roi, 0, 255, cv2.THRESH_BINARY| cv2.THRESH_OTSU) #全局二值化处理
            gray[row:row+ch, col:cw+col]=dst
            print(np.std(dst), np.mean(dst))
    cv2.imshow("big_image_binary",gray)

def big_image_binary2(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:cw+col]
            dst=cv2.adaptiveThreshold(roi, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY,127,20)#局部二值化处理
            gray[row:row+ch, col:cw+col]=dst
            print(np.std(dst), np.mean(dst))
    cv2.imshow("big_image_binary",gray)

print("-------hello-------")
src=cv2.imread("dwaii.png")
big_image_binary(src)
big_image_binary2(src)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

原图:

【OpenCV3.3+Python3.6】超大图像二值化方法

全局阈值二值化

【OpenCV3.3+Python3.6】超大图像二值化方法

局部阈值二值化

【OpenCV3.3+Python3.6】超大图像二值化方法