[python-opencv]超大图像二值化方法
2024-08-29 11:39:16
*分块
*全局阈值 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()
原图:
全局阈值效果:
全局阈值过滤掉噪点效果:【上一张图全局阈值右边还有噪点 过滤后噪点消失】
高斯C方法局部阈值效果:
补充知识点:
#np.std() 标准差
#np.mean() 均值
>>> a = np.array([[1, 2], [3, 4]])
>>> np.std(a) # 计算矩阵全局标准差
1.1180339887498949
>>> np.std(a) # 计算矩阵全局标准差
2.5
>>> np.std(a, axis=0) # axis=0计算每一列的标准差
array([ 1., 1.])
>>> np.std(a, axis=1) # 计算每一行的标准差 array([ 0.5, 0.5])
最新文章
- 代码阅读工具:Source Navigator和Source Insight
- 主机无法访问虚拟机Linux的apache
- 习题-第5章Web自动化测试
- iOS开发UI篇—popoverController简单介绍
- sql server 脚本创建数据库邮件
- 开启所有PHP错误!无论在任何时候
- STL函数模板(即算法)一览
- Learning Cocos2d-x for WP8(6)——场景切换和场景过渡效果
- sql server连接oracle并实现增删改查
- window10下TensorFlow-gpu环境搭建
- Log4j2 + Maven的配置文件示例详解
- HDU-1087.SuperJUmpingJUmpingJumping.(DP and LISPP)
- SlickMaster.NET 开源表单设计器快速使用指南
- linux下集成开发环境之ECLIPSE--在线调试、编译程序
- LINUX block I/O --systemtap
- 动态更新ViewPager中的Fragment(替换Fragment)
- 高斯白噪声(white Gaussian noise,WGN)
- Text Particle Systems
- 手把手教你看KEGG通路图!
- spring mvc 集成hibernate步骤