总结一下传统的就是:
1.先分析验证码,前景颜色是否不定
2.然后把验证码的宽度/验证码文字个数,比如一验证码下载后宽度为60,有4个数字,那么就60/4=15,然后保存每个字,如果只有数字保存0-9数字到位图文件,如果英文那更麻烦点,0-9,A-Z都要保存到位图,位图的前景色都不变,保持一种颜色,背景随便你改不改
3.如果前景要变则将文字统一为同种颜色,每个数字0-9的点阵都有个公共点,取该公共点颜色然后把前景全部统一成一种颜色,比如白色{ 255,255,255 },位图的结构是BGR,而不是RGB
4.然后进行比较,如果验证码的一点为白色,第2步保存的位图同一点也是白色,那么频率增加1
5.最后频率最高的就是验证码了!
可是这种传统的识别方法却遇到了挑战!如果图片数字的位置也是随机出现,大小也是随机出现,那么这种识别方法也就失效了,百度贴吧的就是这样的验证码。
笔者这里向大家引入一个专有名词:“hough变换”也许学习计算机图像学的朋友知道,笔者还是简要介绍一下:
直线hough变换:直线Hough变换利用图像空间和Hough参数空间的点-线对偶性,把图像空间中的检测问题转换到参数空间。通过在参数空间里进行简单的累加统计,然后在Hough参数空间寻找累加器峰值的方法检测直线。例如,图1(a)中的九条线段对应于如图1(b)所示的其Hough参数空间的九个累加器峰值。图1(b)中,Hough参数空间的横纵坐标分别为直线极坐标方程:ρ=x×cos(θ) + y×sin(θ) 的两个参数ρ和θ。九个峰值的ρ和θ值唯一的确定其对应线段所在直线的两个参数。并且线段的长度决定坐标(ρ,θ)处的累加值的大小。