超大图像的二值化方法

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. 第二篇-bmob云端服务器的发现

    最近认识了一个Bmob云端服务器,使用它提供的API可以轻松地完成与数据库(bmob)的交互,使开发更加专注于功能的实现. 这很方便对js的学习,完全可以利用前端三板斧来搭建一个网站,并且初步实现简单 ...

  2. Hexo博客搭建全解

    [原创,转载请附网址:http://dongshuyan.top] 欢迎来到莫与的博客,第一篇记录了一下怎么写一篇博客,以方便之后写博客~ #从配置说起下载安装Git与Node.js略过 1.安装he ...

  3. 树莓派两用优盘制作(FAT32存储+EXT树莓派系统)

    版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:树莓派两用优盘制作(FAT32存储+EXT树莓派系统)     本文地址:http://tec ...

  4. 【Leetcode】72 Edit Distance

    72. Edit Distance Given two words word1 and word2, find the minimum number of steps required to conv ...

  5. PHP 多文件打包下载 zip

    <?php $zipname = './photo.zip'; //服务器根目录下有文件夹public,其中包含三个文件img1.jpg, img2.jpg, img3.jpg,将这三个文件打包 ...

  6. (转) Elasticsearch 5.0 安装 Search Guard 5 插件

    一.Search Guard 简介 Search Guard  是 Elasticsearch 的安全插件.它为后端系统(如LDAP或Kerberos)提供身份验证和授权,并向Elasticsearc ...

  7. PHP中访问控制修饰符

    访问控制修饰符 形式: class  类名{ 访问控制修饰符  属性或方法定义: } 有3个访问修饰符: public公共的:在所有位置都可访问(使用). protected受保护的:只能再该类内部和 ...

  8. perf的统计模式: 突破口: x86_perf_event_update

    之前一直以为perf的统计模式也是通过中断出发来的,于是会在中断处理函数中做处理,但是如果perf是统计模式,那么perf的寄存器就不会是溢出的模式了,这个时候,就没有pmu的中断发生,所以很奇怪呢, ...

  9. CF954F Runner's Problem(动态规划,矩阵快速幂)

    CF954F Runner's Problem(动态规划,矩阵快速幂) 题面 CodeForces 翻译: 有一个\(3\times M\)的田野 一开始你在\((1,2)\)位置 如果你在\((i, ...

  10. Round 403 div. 2

    B 可以二分相遇的坐标:也可以二分时间,判断是否存在两个人的区间没有交. An easy way to intersect a number of segments [l1, r1], ..., [l ...