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(白色)。

该方法的好处是计算

没有任何理由可以解释,其次完全不考虑图像的

像素分布情况与像素值特征。可以说该方法是史最弱智的二值处理方法一点也不为过。

作者:: 老哇的爪子 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

~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. [置顶] c#验证码识别、图片二值化、分割、分类、识别

    c# 验证码的识别主要分为预处理.分割.识别三个步骤 首先我从网站上下载验证码 处理结果如下: 1.图片预处理,即二值化图片 *就是将图像上的像素点的灰度值设置为0或255. 原理如下: 代码如下: ...

  2. atitit.验证码识别step3----去除边框---- 图像处理类库 attilax总结java版本

    atitit.验证码识别step3----去除边框---- 图像处理类库 attilax总结java版本 1. 去除边框思路原理 1 2. Thumbnailator 是一个用来生成图像缩略图.裁切. ...

  3. atitit.验证码识别step2------剪贴板ClipBoard copy image图像 attilax总结

    atitit.验证码识别step2------剪贴板ClipBoard copy image图像 attilax总结 剪贴板(ClipBoard)是内存中的一块区域,是Windows内置的一个非常有用 ...

  4. python 验证码识别示例(二) 复杂验证码识别

     在这篇博文中手把手教你如何去分割验证,然后进行识别. 一:下载验证码 验证码分析,图片上有折线,验证码有数字,有英文字母大小写,分类的时候需要更多的样本,验证码的字母是彩色的,图片上有雪花等噪点,因 ...

  5. c#数字图像处理(二)彩色图像灰度化,灰度图像二值化

    为加快处理速度,在图像处理算法中,往往需要把彩色图像转换为灰度图像,在灰度图像上得到验证的算法,很容易移植到彩色图像上.24位彩色图像每个像素用3个字节表示,每个字节对应着R.G.B分量的亮度(红.绿 ...

  6. Java基于opencv实现图像数字识别(三)—灰度化和二值化

    Java基于opencv实现图像数字识别(三)-灰度化和二值化 一.灰度化 灰度化:在RGB模型中,如果R=G=B时,则彩色表示灰度颜色,其中R=G=B的值叫灰度值:因此,灰度图像每个像素点只需一个字 ...

  7. python+tesseract验证码识别的一点小心得

    由于公司需要,最近开始学习验证码的识别 我选用的是tesseract-ocr进行识别,据说以前是惠普公司开发的排名前三的,现在开源了.到目前为止已经出到3.0.2了 当然了,前期我们还是需要对验证码进 ...

  8. python 验证码识别之pytesser以及image学习记录

    一般的步骤就是上面这些,总的来说分为三部分,去除背景,分割字符,识别. 去除背景可以通过灰度化,二值化,去噪,倾斜度校正等(一般来说灰度化和二值化都是需要的,去噪和倾斜度看情况) 安装PIL工具,下载 ...

  9. 中国知网(CNKI)验证码识别

    中国知网(CNKI)是最重要的中文学术资源数据库,收录绝大多数中文学术刊物.我们可以检索论文,也可以导出检索结果前6000条论文的题录数据. 在CNKI检索结果翻页10次以上,用户需要手动输入验证码才 ...

随机推荐

  1. UNICODE串转换成char类型串的四种方法

    1. 调用 WideCharToMultiByte() API int WideCharToMultiByte (     UINT    CodePage,                //1 U ...

  2. Google Breakpad 完全解析(一) —— Windows入门篇

    原创文章,转载请标明出处:Soul Apogee (http://bigasp.com),谢谢. Google breakpad是一个非常实用的跨平台的崩溃转储和分析模块,他支持Windows,Lin ...

  3. Unity-EasyTouch插件之One Finger

    这节课,我们主要讲下单个手指的测试.比如单击啊,双击啊,拖动,单手滑动等. 单击: public class TouchTest : MonoBehaviour { // Subscribe to e ...

  4. 17、percona-toolkit

    pt-ioprofile工具:1.percona-toolkit(在http://www.percona.com下载)2.安装该工具依赖的perl组件yum install perl-IO-Socke ...

  5. ISP图像调试工程师——自动白平衡(熟悉3A算法)

    http://blog.csdn.net/wzwxiaozheng/article/details/40586293 https://wenku.baidu.com/view/24632048767f ...

  6. Spark Streaming数据清理内幕彻底解密

    本讲从二个方面阐述: 数据清理原因和现象 数据清理代码解析 Spark Core从技术研究的角度讲 对Spark Streaming研究的彻底,没有你搞不定的Spark应用程序. Spark Stre ...

  7. 【Django】依赖auth.user的数据库迁移,以及admin用户非交互式创建

    admin用户非交互式创建: echo "from django.contrib.auth.models import User; User.objects.create_superuser ...

  8. Python Pygal绘制世界人口地图

    数据集可在 https://datahub.io/JohnSnowLabs/population-figures-by-country 下载 #coding=utf-8 import json fro ...

  9. [Angular] Angular i18n Alternative Expressions Support (select)

    For example we have those code: <div class="course-category" [ngSwitch]="course.ca ...

  10. javascript设置首页,加入收藏

    <a href="javascript:;" id="setHomePage" class="toolsbar" onclick=&q ...