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

  (1) 全局阈值处理
  (2) 局部阈值

二,空白区域过滤

三,先缩放进行二值化,然后还原大小

np.mean() 返回数组元素的平均值

np.std() 返回数组元素的标准差

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

 (1) 全局阈值处理 

 (2) 局部阈值

 1 import cv2 as cv
2 import numpy as np
3
4 """
5 def big_image_binary(image):
6 print(image.shape) #(4208, 2368, 3)  #超大图像,屏幕无法显示完整
7 cw,ch = 256,256
8 h,w = image.shape[:2]
9 gray = cv.cvtColor(image,cv.COLOR_RGB2GRAY) #要二值化图像,要先进行灰度化处理
10 for row in range(0,h,ch):
11 for col in range(0,w,cw):
12 roi = gray[row:row+ch,col:col+cw] #获取分块
13 #全局阈值
14 # ret,binary = cv.threshold(roi,0,255,cv.THRESH_BINARY|cv.THRESH_OTSU)
15
16
17 #局部阈值  
18 binary = cv.adaptiveThreshold(roi,255,cv.ADAPTIVE_THRESH_GAUSSIAN_C,cv.THRESH_BINARY,127,20)  
19 gray[row:row + ch, col:col + cw] = binary  #分块覆盖
20 print(np.std(binary),np.mean(binary))
21
22 cv.imwrite("binary2.jpg",gray)

二,空白区域过滤

 1 #空白区域过滤
2 def big_image_binary(image):
3 print(image.shape)
4 # 分成小块,每一块的宽高
5 cw = 256
6 ch = 256
7 #整个图像的宽高
8 h, w = image.shape[:2]
9 gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
10 #步长 ch cw
11 for row in range(0, h, ch):
12 for col in range(0, w, cw):
13 #获取分块(感兴趣区域)
14 roi = gray[row:row+ch, col:cw+col]
15 print(np.std(roi), np.mean(roi))
16 dev = np.std(roi)
17 if dev < 15:
18 gray[row:row + ch, col:cw + col] = 255 #dev < 15的让它变白
19 else:
20 ret, dst = cv.threshold(roi, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)
21 gray[row:row + ch, col:cw + col] = dst
22 cv.imwrite("D:/vcprojects/result_binary.png", gray)
23
24
25 print("--------- Python OpenCV Tutorial ---------")
26 src = cv.imread("D:/vcprojects/images/red_text2.png")
27 #cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
28 #cv.imshow("input image", src)
29 big_image_binary(src)
30 cv.waitKey(0)
31
32 cv.destroyAllWindows()
33 big_image_binary(src)
34 cv.waitKey(0)
35
36 cv.destroyAllWindows()

参考:

https://blog.csdn.net/weixin_41722450/article/details/104265595

python实现超大图像的二值化方法的更多相关文章

  1. OpenCV图像的二值化

    图像的二值化: 与边缘检测相比,轮廓检测有时能更好的反映图像的内容.而要对图像进行轮廓检测,则必须要先对图像进行二值化,图像的二值化就是将图像上的像素点的灰度值设置为0或255,这样将使整个图像呈现出 ...

  2. OpenCV中对图像进行二值化的关键函数——cvThreshold()。

    函数功能:采用Canny方法对图像进行边缘检测 函数原型: void cvThreshold( const CvArr* src, CvArr* dst, double threshold, doub ...

  3. 二值化方法:Kittler:Minimum Error Thresholding

    Kittler二值化方法,是一种经典的基于直方图的二值化方法.由J. Kittler在1986年发表的论文“Minimum Error Thresholding”提出.论文是对贝叶斯最小错误阈值的准则 ...

  4. 数学思想方法-python计算战(8)-机器视觉-二值化

    二值化 hreshold Applies a fixed-level threshold to each array element. C++: double threshold(InputArray ...

  5. 实现图像的二值化(java+opencv)

    书里的解释: 其他的没找到什么资料,直接参考百度百科 https://baike.baidu.com/item/%E5%9B%BE%E5%83%8F%E4%BA%8C%E5%80%BC%E5%8C%9 ...

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

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

  7. opencv 对RGB图像直接二值化

    #include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace st ...

  8. python 读取、保存、二值化、灰度化图片+opencv处理图片的方法

    http://blog.csdn.net/johinieli/article/details/69389980

  9. OpenCV---超大图像二值化和空白区域过滤

    超大图像的二值化方法 1.可以采用分块方法, 2.先缩放处理就行二值化,然后还原大小 一:分块处理超大图像的二值化问题 def big_image_binary(image): print(image ...

随机推荐

  1. mysql从零开始之MySQL 删除数据库

    MySQL 删除数据库 使用普通用户登陆 MySQL 服务器,你可能需要特定的权限来创建或者删除 MySQL 数据库,所以我们这边使用 root 用户登录,root 用户拥有最高权限. 在删除数据库过 ...

  2. 实现一个简单的侧边导航Winform程序框架

    目录 简介 实现导航面板 实现方法 使用方法 实现标题栏 窗体拖拽及最大化 自定义窗体按钮 标题显示 按钮设置 实现状态栏 整体使用 参考文章 简介 每次新项目都要想着界面怎么设计好,但想来想去上位机 ...

  3. System.Drawing Linux Centos7 The type initializer for 'Gdip' threw an exception

    System.Drawing 在linux使用时提示异常 The type initializer for 'Gdip' threw an exception 解决方案: yum install au ...

  4. 分析你的第一个Android程序

    目录 分析你的第一个Android程序 Android模式的项目结构 切换项目结构模式 Project模式的项目结构 .gradle和idea app build(没有发现这个文件夹) gradle ...

  5. Linux基本命令 和 Regex 正则表达式

    Linux基本命令 和 Regex 正则表达式 Regex 基本语法 常用匹配规则 [aeiouAEIOU] # 从中随机选择一个 [0-9]{4} # 从中选择4个 .* # 匹配任意字符 \w # ...

  6. Flink sql 之 TopN 与 StreamPhysicalRankRule (源码解析)

    基于flink1.14的源码做解析 公司内有很多业务方都在使用我们Flink sql平台做TopN的计算,今天同事突然问到我,Flink sql 是怎么实现topN的 ? 蒙圈了,这块源码没看过啊 , ...

  7. Android系统编程入门系列之应用权限的定义与申请

    在之前关于应用内数据本地保存为文件时,曾提到应用需要申请外部存储设备的读写权限才能访问外部存储中的文件.那么针对某一种权限,应用程序具体应该怎么申请使用呢?本文将详细介绍. 应用中的权限主要分为两类, ...

  8. Alpha阶段发布声明

    发布声明 Alpha 1.Alpha版本功能说明 功能列表和详情图 模块 功能 展示 首页 查看首页博文,搜索博文,可供未登录用户使用 动态 查看推荐动态给未登录用户使用,登录用户可以查看关注动态.我 ...

  9. Gitflow branch与Docker image tag命名冲突怎么办?

    谷歌还是比必应要好用一点. 在前公司,我根据主流的git flow 给团队搭建了一套devops流程,运行在 docker & k8s上. 在现代devops流程中,一般推荐使用git分支名或 ...

  10. 线路由器频段带宽是是20M好还是40M好

    无线路由器频段带宽还是40M好. 40M的信号强,速度快.   1.20MHz在11n的情况下能达到144Mbps带宽.穿透性不错.传输距离较远 40MHz在11n的情况下能达到300Mbps带宽.穿 ...