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:[email protected]

转载请注明来源: 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

时间: 2024-10-13 03:14:04

atitit.验证码识别step4--------图形二值化 灰度化的相关文章

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

atitit.验证码识别step3----去除边框---- 图像处理类库 attilax总结java版本 1. 去除边框思路原理 1 2. Thumbnailator 是一个用来生成图像缩略图.裁切.旋转.添加水印等操作 2 3. OpenCL的Java库 JavaCL 2 4. Java Image Filters是一款基于Java的图像处理类库,特别是在图像滤镜特效方面, 2 4.1.1. 色彩调整 2 4.1.2. 变形和扭曲 5 5. JJIL 是一个Java 的图像处理类库,有超过60

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

atitit.验证码识别step2------剪贴板ClipBoard copy image图像 attilax总结 剪贴板(ClipBoard)是内存中的一块区域,是Windows内置的一个非常有用的工具,通过小小的剪贴板,架起了一座彩桥,使得在各种应用程序之间,传递和共享信息成为可 系统剪切板一般支持String文本类型和Image图像类型:支持自定义剪切板数据类型 常见的剪切板数据类型 作者:: 老哇的爪子 Attilax 艾龙,  EMAIL:[email protected] 转载请注

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

 在这篇博文中手把手教你如何去分割验证,然后进行识别. 一:下载验证码 验证码分析,图片上有折线,验证码有数字,有英文字母大小写,分类的时候需要更多的样本,验证码的字母是彩色的,图片上有雪花等噪点,因此识别改验证码难度较大 二:二值化和降噪: 三: 切割: 四:分类: 五:   测试识别率             六:总结: 综合识别率在70%左右,对于这个识别率我觉得还是挺高的,因为这个验证码的识别难度还是很大 代码: 1.  下载图片: #-*-coding:utf-8-*- import

[Python]图像二值化

https://blog.csdn.net/qq_35531549/article/details/96134760 # 识别前处理# 图片二值化from PIL import Imageimport osos.chdir('D:\OCR')img = Image.open('test.png') # 模式L”为灰色图像,它的每个像素用8个bit表示,0表示黑,255表示白,其他数字表示不同的灰度.Img = img.convert('L')Img.save("test1.png")

【数字图像】C++8位和24位BMP位图的平滑、锐化、二值化处理,以及24位真彩图的灰度化

头文件: typedef unsigned char BYTE; typedef unsigned short WORD; typedef unsigned int DWORD; typedef long LONG; //BMP文件头(14字节) typedef struct tagBITMAPFILEHEADER { //WORD bfType;//位图文件的类型,必须为BM(在结构体中读取会发生错误,所以在函数中读取) DWORD bfSize;//位图文件的大小,以字节为单位 WORD b

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

由于公司需要,最近开始学习验证码的识别 我选用的是tesseract-ocr进行识别,据说以前是惠普公司开发的排名前三的,现在开源了.到目前为止已经出到3.0.2了 当然了,前期我们还是需要对验证码进行一些操作,让他对机器更友好,这样才能提高识别率. 步骤基本上是这样的 第一步对验证码进行灰度图以及二值化 需要用到pil库可以pip下载 代码如下 def binarization(image): #转成灰度图 imgry = image.convert('L') #二值化,阈值可以根据情况修改

基于SVM的字母验证码识别

基于SVM的字母验证码识别 摘要 本文研究的问题是包含数字和字母的字符验证码的识别.我们采用的是传统的字符分割识别方法,首先将图像中的字符分割出来,然后再对单字符进行识别.首先通过图像的初步去噪.滤波.形态学操作等一系列预处理过程,我们能够将图像中的噪点去除掉.为了将字符分割开来,我们利用Kmeans聚类算法对图像中的像素点聚成五类,分别代表五个字符,结果表明Kmeans算法的聚类准确度能够达到99.2%.对字符分割完成之后,我们采用支持向量机的算法对字符进行识别,通过调节参数能够使得准确率达到

初级验证码识别

本来想写个自动识别验证码的程序,验证码是一些可辨率比较高的字母和数字,写着写着发现sb了,同样的数字和字母居然角度旋转过了,觉得这是用js不能完成的任务.coding中止,记录下初步的成果. 拿到例如如上的一张验证码图.首先是去噪,去掉和验证码数字色差很大的像素,然后是分割,把数字分成一块块的矩形,然后是匹配,和一些预处理完的二进制数组进行匹配,最后是输出结果.而因为及时发现在该网站的验证码上做了无用功,我只是到了去噪这步.用户脚本如下: 1 // ==UserScript== 2 // @na

深入了解android平台的jni---图像灰度化处理

一.涉及到的jni编程知识 Java基本类型的数组,在JNI中都是jArray的类型格式.具体类型如下: typedef jarray jbooleanArray; typedef jarray jbyteArray; typedef jarray jcharArray; typedef jarray jshortArray; typedef jarray jintArray; typedef jarray jlongArray; typedef jarray jfloatArray; type