目录
超大图像二值化原理
1、图像分块(区域)
把一幅图像分成多个小正方形区域处理,降低大面积处理时块间相互影响造成误差
import cv2 as cv
import numpy as np
cw = 256
ch = 256
h, w = image.shape[:2]#获取图像的高和宽
gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)#彩色图像灰度化
for row in range(0, h, ch):
for col in range(0, w, cw):
roi = gray[row:row+ch, col:cw+col]
如上代码把image分割成roi=256x256的块图
2、直接过滤某些噪声块+全局阈值二值化
先过滤出一些块的标准差(或均值)小于20左右像素(噪声)块,然后直接赋值为255
import cv2 as cv
import numpy as np
def big_image_binary(image):
print(image.shape)
cw = 256
ch = 256
h, w = image.shape[:2]
gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
for row in range(0, h, ch):
for col in range(0, w, cw):
roi = gray[row:row+ch, col:cw+col]
print(np.std(roi), np.mean(roi))#求图像的roi的标准差和均值
dev = np.std(roi)
if dev < 15:#标准差小于阈值的块赋值255
gray[row:row + ch, col:cw + col] = 255
else:
ret, dst = cv.threshold(roi, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)#全局阈值二值化
gray[row:row + ch, col:cw + col] = dst
cv.imwrite("D:/vcprojects/result_binary.png", gray)
3、分块后局部阈值二值化
局部阈值二值化函数其实又做了一次分块,它还自带一个过滤
import cv2 as cv
import numpy as np
def big_image_binary(image):
print(image.shape)
cw = 256
ch = 256
h, w = image.shape[:2]
gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)#图像灰度化
for row in range(0, h, ch):
for col in range(0, w, cw):
roi = gray[row:row+ch, col:cw+col]#两个for循环分块256X256
dst = cv.adaptiveThreshold(roi,255,cv.ADAPTIVE_THRESH_GAUSSIAN_C,cv.THRESH_BINARY,127,20)#局部阈值二值化
gray[row:row + ch, col:cw + col] = dst
cv.imwrite("D:/vcprojects/result_binary.png", gray)
图像全局阈值和局部阈值二值化函数 在前面一篇文章已经讲过:https://blog.csdn.net/CHWB2580/article/details/105013858