OpenCV---超大图像二值化和空白区域过滤
超大图像的二值化方法
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 mean()用法返回数组元素的平均值
(二)空白图像的过滤(当我们确认该区域为空白图像,可以不作处理,不进行二分处理)
print(np.std(binary),np.mean(binary))
通过上面获取图像的标准差和平均值,当标准差为0,平均值为255时,代表该区域为空白区域
我们可以将该空白区域(或者满足一定条件的区域),直接设置为0或者255或者其他想要获取的图像,不需要进行多余的阈值二分
OpenCV---超大图像二值化和空白区域过滤的更多相关文章
- opencv python 图像二值化/简单阈值化/大津阈值法
pip install matplotlib 1简单的阈值化 cv2.threshold第一个参数是源图像,它应该是灰度图像. 第二个参数是用于对像素值进行分类的阈值, 第三个参数是maxVal,它表 ...
- 10、OpenCV Python 图像二值化
__author__ = "WSX" import cv2 as cv import numpy as np #-----------二值化(黑0和白 255)---------- ...
- [python-opencv]超大图像二值化方法
*分块 *全局阈值 VS 局部阈值 import cv2 as cv import numpy as np def big_image_binary(image): print(image.shape ...
- [python-opencv]图像二值化【图像阈值】
图像二值化[图像阈值]简介: 如果灰度图像的像素值大于阈值,则为其分配一个值(可以是白色255),否则为其分配另一个值(可以是黑色0) 图像二值化就是将灰度图像上的像素值设置为0或255,也就是将整个 ...
- Python+OpenCV图像处理(十)—— 图像二值化
简介:图像二值化就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果的过程. 一.普通图像二值化 代码如下: import cv2 as cv import numpy ...
- OpenCV_基于局部自适应阈值的图像二值化
在图像处理应用中二值化操作是一个很常用的处理方式,例如零器件图片的处理.文本图片和验证码图片中字符的提取.车牌识别中的字符分割,以及视频图像中的运动目标检测中的前景分割,等等. 较为常用的图像二值化方 ...
- 致敬学长!J20航模遥控器开源项目计划【开局篇】 | 先做一个开机界面 | MATLAB图像二值化 | Img2Lcd图片取模 | OLED显示图片
我们的开源宗旨:自由 协调 开放 合作 共享 拥抱开源,丰富国内开源生态,开展多人运动,欢迎加入我们哈~ 和一群志同道合的人,做自己所热爱的事! 项目开源地址:https://github.com/C ...
- C# 指针操作图像 二值化处理
/// <summary> /// 二值化图像 /// </summary> /// <param name="bmp"></param& ...
- openCV_java 图像二值化
较为常用的图像二值化方法有:1)全局固定阈值:2)局部自适应阈值:3)OTSU等. 局部自适应阈值则是根据像素的邻域块的像素值分布来确定该像素位置上的二值化阈值.这样做的好处在于每个像素位置处的二值化 ...
随机推荐
- python序列成员资格
可以用做登录操作,判断用户名密码是否正确! 代码示例: database = [ ['], ['], ['], ['] ] username = input("UserName: " ...
- scrum立会报告+燃尽图(第二周第三次)
此作业要求参考: https://edu.cnblogs.com/campus/nenu/2018fall/homework/2248 一.小组介绍 组名:杨老师粉丝群 组长:乔静玉 组员:吴奕瑶.公 ...
- 敏捷开发与xp实践 实验报告
20162315 敏捷开发与xp实践 实验报告 实验任务 1.在IDEA中使用工具(Code->Reformate Code)把下面代码重新格式化,再研究一下Code菜单,找出一项让自己感觉最好 ...
- HDU 5465 Clarke and puzzle Nim游戏+二维树状数组
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5465 Clarke and puzzle Accepts: 42 Submissions: 26 ...
- "数学口袋精灵"bug
首先要部署这个app项目就是第一步: 一.前提下载并安装JDK 在线图解:手把手教你安装JDK http://www.lvtao.net/server/windows-setup-jdk.h ...
- PAT 甲级 1059 Prime Factors
https://pintia.cn/problem-sets/994805342720868352/problems/994805415005503488 Given any positive int ...
- java和mysql的length()区别及char_length()
一. mysql里面的有length和char_length两个长度函数,区别在于: length: 一个汉字是算三个字符,一个数字或字母算一个字符. char_length: 不管汉字还是数字或者是 ...
- MySQL专题 2 数据库优化 Slow Query log
MySQL Server 有四种类型的日志——Error Log.General Query Log.Binary Log 和 Slow Query Log. 第一个是错误日志,记录 mysqld 的 ...
- Struts访问序号的设置
- 对Spark2.2.0文档的学习2-Job Scheduling
Job Scheduling Link:http://spark.apache.org/docs/2.2.0/job-scheduling.html 概况: (1)集群中多个应用的调度主要考虑的是不同 ...