这篇都是代码。
(1)把图片转换为256色的索引位图,并依照颜色出现频率的高低重排调色板
Bitmap *NormalizeImage(Bitmap *bitmap) { PixelFormat fmt = bitmap->GetPixelFormat(); GUID guid;
bitmap->GetRawFormat(&guid); printf("normalizing ...\n"); printf("format: %s; size: %d x %d; pixel: %dbit; %s%s\n", GetImageFormat(guid), bitmap->GetWidth(), bitmap->GetHeight(), GetPixelFormatSi
上一篇讲到如何使用tesseract-ocr,不过它只能处理黑白二色的图片,而图片验证码一般都是彩色的,还需要进行处理转换才能交给tesseract-ocr。实际上,tesseract-ocr只是在最后的一步才出场的,前面有很多工作,需要我们自己来进行处理:把图像转换为位图;去除背景;去除用来干扰的点或线;把图像转换为两色的位图。
依照学院派的理论(图像处理),这里面的算法是非常复杂的。实际用的验证码其实没有那么复杂,用些简单的手段就可以对付了。比如,有些验证码,背景的颜色和文字的颜色相对固定,只要找到一个阈值就能区分
tesseract-ocr是一个开源的OCR引擎,在http://code.google.com/p/tesseract-ocr/这里可以下载得到。使用它来识别图片验证码,有点“杀鸡用牛刀”的感觉。
先讲下怎么编译和使用tesseract。我使用的是VS 2005,就以它为例吧。首先在google code上下载最新的源代码
亚太地区的IP地址是由APNIC来分配的,它提供了两种界面给我们查询这些信息:(1)web方式,访问http://whois.apnic.net/,就可以达到查询的界面。(2)whois协议方式(协议端口是43), 使用起来也很简单,直接在命令行下telnet:telnet whois.apnic.net 43,输入查询条件,按回车就能得到结果了。比如输入218.1.1.1<CR><LF>,你就能知道218.1.0.0 - 218.1.255.255这个IP段都是上海电信的。
我们使用程序的方式来自动获取所有的运营商地址段,在这之前,最好看一下who
发现一个能够上传flash的论坛,但是没有找到可以引用flash的地方(发帖的地方却不允许flash),只可以直接访问flash的地址。直接访问flash URL是可以执行JavaScript和网络收发的函数的。但是有一点比较棘手:window.document对象却变成了unknow,这样我们就不能去获得document.cookie,也不能操纵DOM了,实在太遗憾了。试了一下,window.ActiveXObject方法却还在,比如你可以用它来调用Word。还没有想到更好的利用的方法……