超大图像的二值化方法

1.可以采用分块方法,

2.先缩放处理就行二值化,然后还原大小

一:分块处理超大图像的二值化问题

def big_image_binary(image):
print(image.shape) #(, , )  #超大图像,屏幕无法显示完整
cw,ch = ,
h,w = image.shape[:]
gray = cv.cvtColor(image,cv.COLOR_RGB2GRAY) #要二值化图像,要先进行灰度化处理
for row in range(,h,ch):
for col in range(,w,cw):
roi = gray[row:row+ch,col:col+cw] #获取分块
# ret,binary = cv.threshold(roi,,,cv.THRESH_BINARY|cv.THRESH_OTSU)  #全局阈值
binary = cv.adaptiveThreshold(roi,,cv.ADAPTIVE_THRESH_GAUSSIAN_C,cv.THRESH_BINARY,,)  #局部阈值
gray[row:row + ch, col:col + cw] = binary  #分块覆盖
print(np.std(binary),np.mean(binary)) cv.imwrite("binary2.jpg",gray)

(一)全局阈值处理

ret,binary = cv.threshold(roi,,,cv.THRESH_BINARY|cv.THRESH_OTSU)  #全局阈值

(二)局部阈值(更好)

binary = cv.adaptiveThreshold(roi,,cv.ADAPTIVE_THRESH_GAUSSIAN_C,cv.THRESH_BINARY,,)  #局部阈值

二:空白区域过滤

def big_image_binary(image):
print(image.shape) #(, , )
cw,ch = ,
h,w = image.shape[:]
gray = cv.cvtColor(image,cv.COLOR_RGB2GRAY) #要二值化图像,要先进行灰度化处理
for row in range(,h,ch):
for col in range(,w,cw):
roi = gray[row:row+ch,col:col+cw] #获取分块
dev = np.std(roi)
avg = np.mean(roi)
if dev < and avg > :  #满足条件,接近空白区域,让他变黑
gray[row:row + ch, col:col + cw] = #全部都赋值为0
else:
ret,binary = cv.threshold(roi,,,cv.THRESH_BINARY|cv.THRESH_OTSU)
gray[row:row + ch, col:col + cw] = binary
print(np.std(binary), np.mean(binary)) cv.imwrite("binary.jpg",gray)

相关知识补充

(一)numpy中相关方法介绍

numpy.std() 计算矩阵标准差

numpy mean()用法返回数组元素的平均值

(二)空白图像的过滤(当我们确认该区域为空白图像,可以不作处理,不进行二分处理)

print(np.std(binary),np.mean(binary))
通过上面获取图像的标准差和平均值,当标准差为0,平均值为255时,代表该区域为空白区域
我们可以将该空白区域(或者满足一定条件的区域),直接设置为0或者255或者其他想要获取的图像,不需要进行多余的阈值二分

OpenCV---超大图像二值化和空白区域过滤的更多相关文章

  1. opencv python 图像二值化/简单阈值化/大津阈值法

    pip install matplotlib 1简单的阈值化 cv2.threshold第一个参数是源图像,它应该是灰度图像. 第二个参数是用于对像素值进行分类的阈值, 第三个参数是maxVal,它表 ...

  2. 10、OpenCV Python 图像二值化

    __author__ = "WSX" import cv2 as cv import numpy as np #-----------二值化(黑0和白 255)---------- ...

  3. [python-opencv]超大图像二值化方法

    *分块 *全局阈值 VS 局部阈值 import cv2 as cv import numpy as np def big_image_binary(image): print(image.shape ...

  4. [python-opencv]图像二值化【图像阈值】

    图像二值化[图像阈值]简介: 如果灰度图像的像素值大于阈值,则为其分配一个值(可以是白色255),否则为其分配另一个值(可以是黑色0) 图像二值化就是将灰度图像上的像素值设置为0或255,也就是将整个 ...

  5. Python+OpenCV图像处理(十)—— 图像二值化

    简介:图像二值化就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果的过程. 一.普通图像二值化 代码如下: import cv2 as cv import numpy ...

  6. OpenCV_基于局部自适应阈值的图像二值化

    在图像处理应用中二值化操作是一个很常用的处理方式,例如零器件图片的处理.文本图片和验证码图片中字符的提取.车牌识别中的字符分割,以及视频图像中的运动目标检测中的前景分割,等等. 较为常用的图像二值化方 ...

  7. 致敬学长!J20航模遥控器开源项目计划【开局篇】 | 先做一个开机界面 | MATLAB图像二值化 | Img2Lcd图片取模 | OLED显示图片

    我们的开源宗旨:自由 协调 开放 合作 共享 拥抱开源,丰富国内开源生态,开展多人运动,欢迎加入我们哈~ 和一群志同道合的人,做自己所热爱的事! 项目开源地址:https://github.com/C ...

  8. C# 指针操作图像 二值化处理

    /// <summary> /// 二值化图像 /// </summary> /// <param name="bmp"></param& ...

  9. openCV_java 图像二值化

    较为常用的图像二值化方法有:1)全局固定阈值:2)局部自适应阈值:3)OTSU等. 局部自适应阈值则是根据像素的邻域块的像素值分布来确定该像素位置上的二值化阈值.这样做的好处在于每个像素位置处的二值化 ...

随机推荐

  1. java 乐观锁 vs 悲观锁

    在数据库的锁机制中介绍过,数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性. 悲观锁其实就是 完全同步 比如 sync ...

  2. JS数据结构学习之排序

    在看<>这本书中关于排序这一章的时候,我试着用javascript语言来重写里面几个经典的排序方法,包括冒泡排序.快速排序.选择排序.插入排序还有希尔排序. 一.冒泡排序 冒泡排序算是排序 ...

  3. Python Pygame (3) 界面显示

    显示模式: 之前使display模块的set_mode()的方法用来指定界面的大小,并返回一个Surface对象. set_mode()的原型如下: display.set_mode(resoluti ...

  4. 20181120-4 Beta阶段第2周/共2周 Scrum立会报告+燃尽图 01

    此作业要求参见https://edu.cnblogs.com/campus/nenu/2018fall/homework/2409 版本控制地址   https://git.coding.net/lg ...

  5. LNMP环境+ 前后端项目部署+redis+redis扩展

    LNMP 环境    (参照https://lnmp.org/install.html) wget -c http://soft.vpser.net/lnmp/lnmp1.4.tar.gz & ...

  6. WITH HINDSIGHT

    设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 我们是要做一个基于文件同步展示的语音软件:感谢之前的两次项目审核,我们定义与描述得很清楚: 我们达到目标 ...

  7. maven项目org.springframework.web.context.ContextLoaderListener的异常和tomcat zipexception的异常

    使用到spring的maven web项目,在运行servers时,报错找不到org.springframework.web.context.ContextLoaderListener,web.xml ...

  8. openssl 基本加密

    openssl命令行工具详解(openssl的命令众多,请酌情处理与记忆) 在命令行输入:openssl asdf,可以显示openssl的命令说明   1:Standard commands(标准命 ...

  9. Spring事务管理Transaction【转】

    Spring提供了许多内置事务管理器实现(原文链接:https://www.cnblogs.com/qiqiweige/p/5000086.html): DataSourceTransactionMa ...

  10. LoadRunner脚本增强技巧之自动关联

    为什么要做关联,原理很简单,录制脚本的时候,服务器会给用户一个唯一的认证码来进行操作,当再次回放脚本的时候服务器又会给一个全新的认证码,而录制好的脚本是写死的,还是拿老的认证码提交,肯定会导致脚本执行 ...