近期忙,没有接着原来的写,今天过来看了下,发现很冷清,决定花点时间修饰一下。
基础的东西写多了,没意思,也没观众,来个实在的:原CSDN 验证码识别过程详解。
先上几个图:
第一个图: 原始的验证码图
第二个图:灰度直方图
第三个图:红色直方图
第四个图:绿色直方图
第五个图:蓝色直方图
第六个图:色调直方图
第七个图:饱和度直方图
第八个图:亮度直方图
好了,基本的图上完了,看怎么处理哈:
第一步:直接变成黑白图,在代码面板中输入 filter.blank();
如下图,
然后点击运行,再转到图像面板:图想变成黑白的了:
黑白中有很多小黑点,要去掉所有小黑点,只需要转到脚本面板,输入 filter.close(new int[]{0,0,0,0},2,2); 选中这句话,点击 run
进行图像处理中的闭运算,可以去掉很多小黑点,结果图如下:
还有两个小黑点,很讨厌,可以用大一点的模版( 2 × 3 ,刚才是 2 × 2 )去把它去掉:
filter.close(new int[] { 0, 0 ,0,0,0,0}, 2, 3); 结果如下:
好了,现在已经是没有干扰的黑白图像了,就开始切吧:
调用自己写的切分算法(按连通切分): filter.cut(); 可以生成 5 张图片:运行下面的代码,把每张图片显示了出来:
List ll = filter.cut();
for(BufferedImage img:ll){
new ImageTest(img);
}
图片如下:
对每一张图片 ( 例如最后那张 X) ,进行切空边,调用代码: filter.cutPadding();
这样就差不多可以和原来的模版比,看和哪个字符最相似。模式匹配的部分,这里就步多说了,留到以后有机会再说。这里讲了图象的预处理与分割。