先分块,在局部二值化
# -*- coding: utf-8 -*-
"""
超大图像二值化
图像ROI与空白图像过滤
局部阈值图像二值化
@author: LNP
"""
import cv2 as cv
import numpy as np
def big_image_demo(image):
gray=cv.cvtColor(image,cv.COLOR_BGR2GRAY)
h,w=image.shape[:2]
sh,sw=256,256
#split=np.zeros([sh,sw],np.uint8)
for row in range(0,h,sh):
for col in range(0,w,sw):
roi=gray[row:row+sh,col:col+sw]
dev=np.std(roi)#标准差小于5,表明图像很白,用于消除雪花
if dev<5:
gray[row:row+sh,col:col+sw]=255
else:
dst=cv.adaptiveThreshold(roi,255,cv.ADAPTIVE_THRESH_GAUSSIAN_C,cv.THRESH_BINARY,127,20)
#ret,dst=cv.threshold(roi,0,255,cv.THRESH_BINARY | cv.THRESH_OTSU) #全局阈值效果不好
gray[row:row+sh,col:col+sw]=dst
cv.namedWindow('big_image_demo',cv.WINDOW_FREERATIO)
cv.imshow('big_image_demo',gray)
src=cv.imread("D:/Study/opencv/code/big.jpg")
cv.namedWindow('src',cv.WINDOW_FREERATIO)
cv.imshow('src',src)
big_image_demo(src)
cv.waitKey(0)
cv.destroyAllWindows()