atitit.验证码识别step4--------图形二值化 灰度化
atitit.验证码识别step4--------图形二值化 灰度化
1. 常见二值化的方法原理总结 1
1.1. 方法一:该方法非常简单,对RGB彩色图像灰度化以后,扫描图像的每个像素值,值小于127的将像素值设为0(黑色),值大于等于127的像素值设为255(白色)。 1
1.2. 方法二:最常见的二值处理方法是计算像素的平均值K, 2
1.3. 方法三:使用直方图方法来寻找二值化阈值, 2
1.4. 方法四:使用近似一维Means方法寻找二值化阈值,(推荐) 3
2. 使用类库imageio 3
3. 参考 4
1. 常见二值化的方法原理总结
要本文讨论的方法仅针对RGB色彩空间。
1.1. 方法一:该方法非常简单,对RGB彩色图像灰度化以后,扫描图像的每个像素值,值小于127的将像素值设为0(黑色),值大于等于127的像素值设为255(白色)。
该方法的好处是计算
量少速度快。缺点更多首先阈值为127没有任何理由可以解释,其次完全不考虑图像的
像素分布情况与像素值特征。可以说该方法是史最弱智的二值处理方法一点也不为过。
作者:: 老哇的爪子 Attilax 艾龙, EMAIL:1466519819@qq.com
转载请注明来源: http://blog.csdn.net/attilax
1.2. 方法二:最常见的二值处理方法是计算像素的平均值K,
描图像的每个像素值如像素值大于K
像素值设为255(白色),值小于等于K像素值设为0(黑色)。该方法相比方法一,阈值的
选取稍微有点智商,可以解释。但是使用平均值作为二值化阈值同样有个致命的缺点,
可能导致部分对象像素或者背景像素丢失。二值化结果不能真实反映源图像信息。
1.3. 方法三:使用直方图方法来寻找二值化阈值,
直方图是图像的重要特质,直方图方法选择二值
化阈值主要是发现图像的两个最高的峰,然后在阈值取值在两个峰之间的峰谷最低处。
该方法相对前面两种方法而言稍微精准一点点。结果也更让人可以接受。
1.4. 方法四:使用近似一维Means方法寻找二值化阈值,(推荐)
http://en.wikipedia.org/wiki/Thresholding_(image_processing)
使用近似一维Means方法寻找二值化阈值,该方法的大致步骤如下:
1. 一个初始化阈值T,可以自己设置或者根据随机方法生成。
2. 根据阈值图每个像素数据P(n,m)分为对象像素数据G1与背景像素数据G2。(n为
行,m为列)
3. G1的平均值是m1, G2的平均值是m2
4. 一个新的阈值T’ = (m1 + m2)/2
5. 回到第二步,用新的阈值继续分像素数据为对象与北京像素数据,继续2~4步,
直到计算出来的新阈值等于上一次阈值。
前面三种在以前的博文中都有涉及,最后一种二值化方法的代码如下:
2. 使用类库imageio
prj。atibrow
ImageDemo demo = new ImageDemo();
demo.binaryImage(deboxJpg,bin_jpg);
public void binaryImage(String pathname,String pathname2) throws IOException {
//String pathname = System.getProperty("user.dir")
//+ "/src/2722425974762424026.jpg";
File file = new File(pathname);
BufferedImage image = ImageIO.read(file);
int width = image.getWidth();
int height = image.getHeight();
BufferedImage grayImage = new BufferedImage(width, height,
BufferedImage.TYPE_BYTE_BINARY);// 重点,技巧在这个参数BufferedImage.TYPE_BYTE_BINARY
for (int i = 0; i < width; i++) {
for (int j = 0; j < height; j++) {
int rgb = image.getRGB(i, j);
grayImage.setRGB(i, j, rgb);
}
}
File newFile = new File(pathname2);
ImageIO.write(grayImage, "jpg", newFile);
}
3. 参考
图像处理之常见二值化方法汇总 - 流浪的鱼 - 博客频道 - CSDN.NET.htm
JAVA灰度化、二值化图片如此简单方便 - 懒人小何 - 博客频道 - CSDN_NET.htm
atitit.验证码识别step4--------图形二值化 灰度化相关推荐
- 数字图像处理——二值、灰度和彩色图像,位图切割
二值.灰度和彩色图像处理 1. 二值.灰度图像的转换 2. 彩色图像的表示 3. 位图切割 -------------------------- -------------------------- ...
- 【文字识别】Lua 二值化函数
LUA二值化效率较低,该函数只适合小范围二值化. 学习算法和思路可转化成C语言提高效率. function binarizeImage(t)local getColorRGB = getColorRG ...
- 验证码识别初探——图形验证码为主
目录 一.需求 二.验证码起源 三.验证码分类 纯文本验证码 图形验证码 Gif动画验证码 手机短信验证码 手机语音验证码 视频验证码 手势验证码 四.简单验证码识别流程和一些算法 五.基本案例 案例 ...
- python 验证码识别示例(二) 复杂验证码识别
在这篇博文中手把手教你如何去分割验证,然后进行识别. 一:下载验证码 验证码分析,图片上有折线,验证码有数字,有英文字母大小写,分类的时候需要更多的样本,验证码的字母是彩色的,图片上有雪花等噪点,因 ...
- 【转】c#数字图像处理(二)彩色图像灰度化,灰度图像二值化
转自:https://www.cnblogs.com/dearzhoubi/p/8571652.html 为加快处理速度,在图像处理算法中,往往需要把彩色图像转换为灰度图像,在灰度图像上得到验证的算法 ...
- 图片识别为什么大部分都将彩色图像灰度化
对于图片识别灰度化的原因这里根据自己的理解和网上看到的一些自己觉得合理的解释这里做个大概总结,如有错误欢迎大神们打脸指正 最直接的原因:减少计算量 包含色彩的图片,特征量,计算量会成指数倍数增加 比如 ...
- PHP验证码识别实例
PHP验证码识别实例 PHP验证码识别实例,识别的过程包括对图像的二值化.降噪.补偿.切割.倾斜矫正.建库.匹配,最后会提供实例代码,能够直接运行识别. 简述 要识别的验证码相对比较简单,没有粘连字符 ...
- 数字识别java开源_Java基于opencv实现图像数字识别(三)—灰度化和二值化
Java基于opencv实现图像数字识别(三)-灰度化和二值化 一.灰度化 灰度化:在RGB模型中,如果R=G=B时,则彩色表示灰度颜色,其中R=G=B的值叫灰度值:因此,灰度图像每个像素点只需一个字 ...
- 图像二值化处理提高pytesseract识别精度
# 识别前处理 # 图片二值化 from PIL import Image import os os.chdir('D:\OCR') img = Image.open('test.png')# 模式L ...
- 小白入门计算机视觉(二) : 图像基本处理----灰度图和二值化
文章目录 解剖图像 图像处理基本原理 RGB模型 灰度 二值化 图像失真问题 从本节开始,我就要正式踏上小白的计算机视觉探索之路,先从图像基础学习吧 解剖图像 要学会图像处理首先就得知道图像的结构,平 ...
最新文章
- 解决苹果APP审核需要的IPv6地址的问题
- GC garbage collection 垃圾回收机制
- 用C++实现的壳(基础版)
- python time timeit_python运行时间计算之timeit
- 01背包问题-一维数组实现原理
- 【LOJ10034】图书管理(哈希表,字符串)
- mysql的collate_MYSQL中的COLLATE是什么?
- 各种推荐算法的 benchmark
- 在mac上用parallels创建双windows虚拟机调试windows驱动
- ROC曲线及AUC值
- gxworks2使用指令手册_三菱编程软件 GX Works2 操作手册简单工程篇中文高清版
- BXP 3.11样机安装详细说明(转)
- opencv 特征提取 -SIFT
- 联想服务器装系统极慢,联想win10系统安装版重装后运行速度变慢了
- 如何使用4G模块通过MQTT协议传输温湿度数据到onenet
- 什么软件适合团队协作?团队协作工具排行
- Linux python + selenium 以 kiosk模式打开Chrome浏览器 并 支持下载文件时询问下载路径
- Biotin-PEG-NH2 生物素PEG氨基
- 惟实励新·笃行致远,艾特网能2022年度合作伙伴大会成功举办
- 几篇神经网络训练语言模型文章的阅读
热门文章
- 背景色渐变html代码,求html文字背景色渐变的代码
- 《C#高效编程》读书笔记04-使用Conditional特性而不是#if条件编译
- TI AM335x Linux MUX hacking
- property中的strong 、weak、copy 、assign 、retain 、unsaf
- 收到“【有奖话题】虚拟空间“筑梦师”,谈谈微软虚拟化 ”礼物一个
- Longest Common Substring($LCS$)
- Maven--Cargo远程部署
- 继续聊WPF——Expander控件(1)
- UI之CALayer详解(转)
- c++/cli 之数据库操作