python opencv图像二值化大律算法_python-opencv 超大图像二值化方法

*分块

*全局阈值 VS 局部阈值

代码:

import cv2 as cv

import numpy as np

def big_image_binary(image):

print(image.shape)

cw = 213

ch = 547

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:col+cw] #进行分块

print(np.std(roi),np.mean(roi))

#全局阈值方法

# ret,dst = cv.threshold(roi,127,256,cv.THRESH_BINARY|cv.THRESH_OTSU)

# gray[row:row + ch, col:col + cw] = dst

# 全局阈值过滤噪点方法

if np.std(roi) < 20:

gray[row:row + ch, col:col + cw] = 255 #块的二维数组平方差小于20时 将其设为255-变白

else:

ret,dst = cv.threshold(roi,127,256,cv.THRESH_BINARY|cv.THRESH_OTSU)

gray[row:row + ch, col:col + cw] = dst

#局部阈值方法

# dst = cv.adaptiveThreshold(roi,255,cv.ADAPTIVE_THRESH_GAUSSIAN_C,cv.THRESH_BINARY,127,20)

# gray[row:row + ch, col:col + cw] = dst

# print(np.std(dst),np.mean(dst)) #np.std(dst)计算矩阵的标准差 np.mean(dst) 均值

cv.imwrite('new_big_image3.jpg',gray)

src = cv.imread('BigImage_Binary1.jpg')

# cv.namedWindow('input_image',cv.WINDOW_AUTOSIZE)

# cv.imshow('input_image',src)

big_image_binary(src)

cv.waitKey(0)

cv.destroyAllWindows()

1541251-20181206224903176-441317829.png

1541251-20181206224951009-1901676866.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值