【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()
原图:
全局阈值二值化
局部阈值二值化