ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 20001|回复: 29

[Excel 程序开发] [第41期]简单验证码识别

[复制链接]

TA的精华主题

TA的得分主题

发表于 2008-10-30 04:29 | 显示全部楼层 |阅读模式
简单验证码识别
已知条件:
目录下的bmp文件夹中有300个 BMP 图像(24位位图)
目录下有“模板.bmp” BMP 图像(24位位图)
bmp目录下的图片均为 40像素宽 10像素高,大小均为1254 字节
分别显示4位数字,所有图片背景色一样。
虽然图片为彩色,但所有单个数字的颜色一样(例:图片中所有的“1” 都是同样的颜色)
模板.bmp 由出题者制作,100像素宽 10像素高,大小为3055字节
显示 0 到 9, 10位数字
为便于核对,bmp目录下所有图片均以所示数字为名。
 
题目1
判断 2分
请根据“模板.bmp” 依次读取300个图片中所示数字填写在 B列,文件名填写在 A列
注意:不是从文件名判断所示数字,文件名仅是便于验证结果、制作模板时用
 
题目2
模板制作 2 分
编写代码从 300 个图片中提取若干(自选)图片生成模板。
注意:模板制作需要人工判断,允许使用文件名中的数字
模板格式可以是任何形式,如所制作模板与"模板.bmp" 不同,
需要编写 相应的代码依次读取 300个图片(题目1 可以此代替)。
 
答题精彩者另外加分
 
仅需发送 EXCEL文件。
EXCEL文件请以用户ID+"_41VBA"保存 例如 LDY_41VBA
答案请压缩后发送到 26258103@163.com 并跟贴占位,请勿在跟贴中直接发答案
邮件主题 格式为 41VBA答案_用户ID 例如 41VBA答案_LDY
因每天收到邮件过多,请严格按要求发送邮件。谢谢合作

题目下载


[ 本帖最后由 ldy 于 2008-11-29 18:49 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2008-10-30 10:33 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
赶紧占位,抢沙发!

答案已经发出,请注意查收! 2008.11.1  凌晨1:45


已收到

[ 本帖最后由 ldy 于 2008-11-29 10:36 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2008-11-4 15:59 | 显示全部楼层
跟贴占位
题目1   答案已发送,

题目2  题二也不知我理解的对不对



已收到, 题二理解正确

[ 本帖最后由 ldy 于 2008-11-29 10:36 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2008-11-5 21:11 | 显示全部楼层
跟贴占位
由于VBA中的限制,此Excel文档识别功能非常有限,只能识别题目中的图片。
由于VBA中的标准控件都没有hWnd或是hDC,所以没有做字符移位、字符旋转、去噪点、去干扰线、字符变色等功能。本身也只是一个竞赛题,又不想自已再去写个控件(没动力 )。
所以这个不能算是一个真正的验证码识别,只是做了简单的图片处理。


[ 本帖最后由 ldy 于 2008-11-29 10:37 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2008-11-7 18:22 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
跟帖,偷懒的做法,不知道服不符合题意。。



收到邮件,符合题意--ldy


[ 本帖最后由 ldy 于 2008-11-29 10:37 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2008-11-9 20:16 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
看来又没收到我的邮件,版主你把我的邮箱地址给屏蔽了?



非常抱歉,可能在某次屏蔽垃圾邮件时,误选的你的邮件。
终于在网上找到了,上次40期的也找到了,是10月11 日的,
如果答案正确,在这一楼 补40期的分。

感谢你的积极参与,并及时提醒。

                                                        -ldy

[ 本帖最后由 ldy 于 2008-11-10 00:31 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-11-29 10:46 | 显示全部楼层
首先要大致了解,BMP24位位图的储存方式(Zldccmx 的答案中有比较详细的比对、介绍)
图像最小单位是像素,通常说的屏幕分辨率 800*600 就是 宽800像素高600像素
每个图片查看器属性,也都可以看到长宽的像素值。
每个像素都以 红蓝绿三色来表示,每个颜色都是以0-255 来表示(BYTE)
但BMP文件的存储顺序为绿蓝红(反的),但这里只是进行比较判断的话,可以不用理会
象bmp文件夹中的图片 都是40*10像素,那么它的大小应该是40*10*3 =1200 字节才对
但实际大小是1254字节,多出来的54个字节就是文件头,通过查看属性得到的信息都在这54个字节里面
这种图片格式 可以说是“原生态” 格式。其他类型的文件格式如JPG PNG等都可以优化压缩bmp文件
但是不管哪种文件格式,只要他的像素乘积相同,那么它的显示的时候所消耗的显存也是相同的。
要验证这个说法也很容易,找一个比较大的图片,分别另存为 24位BMP 和jpeg格式,文件大小的区别约10倍
用两个image控件分别导入这两个图片。
然后用SavePicture方法分别导出,所导出的两个文件大小一模一样
关于图片的文件结构,请查阅相关资料,这里不多废话了
了解了图片文件结构,就可以用二进制数组跳过文件头直接取得图像数据,来比对分析
二进制数组是一条状的(线性的),而显示出来图片是平面的。电脑显示图片的时候
是按照文件头的 宽、高 属性逐行逐点显示的(如果用程序把宽高换个位,那么显示出来的就是凌乱的图像)。
有一点跟人们的思维模式不同的是,人的思维习惯是从左到右、从上倒下来摆顺序的,但BMP文件不是这样的。
它是从左到右、从下到上来摆顺序的。

在这个4个数字的图片中每个数占1/4 (10*10像素)就是300字节
我们可以像电脑显示图片那样循环,用MOD \ 等一些算法,
取得每个数的300字节,分别与模板中的比较,从而得到图片所示数字。
模板的制作,简单的还是数字做成10个文件,二进制数组写成文件,分别命名为0 到 9
或者合并成一个文件,以数组套数组的形式写入文件
(关于多维数组的读写到硬盘,参考附件中的代码 以及 http://club.excelhome.net/thread-375305-1-1.html



[ 本帖最后由 ldy 于 2008-11-29 21:01 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2008-11-29 16:42 | 显示全部楼层
答题期过后,好象应该关闭“作者开启了回复仅楼主可见,本回复内容您不可见”,公布答案吧!

TA的精华主题

TA的得分主题

发表于 2008-12-5 12:05 | 显示全部楼层
原帖由 ldy 于 2008-11-29 10:46 发表
  ...
但实际大小是1254字节,多出来的54个字节就是文件头,通过查看属性得到的信息都在这54个字节里面。
...

稍稍说明一下:文件头并不一定就是54个字节(用我的那个生成的模版图片文件,文件头就大于54,因为在文件里面包含了一个模版字符串,只是用图片方式打开时图片并不会显示出来),文件长度也不一定就是 3*宽度*高度 个字节(在40*10的情况下成立,但多数情况下不成立,因为BMP文件是四字节对齐方式存储的) 。

[ 本帖最后由 joforn 于 2008-12-6 10:46 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-12-5 18:20 | 显示全部楼层
看到了,但标准的24位BMP文件头长度为54 ,这里说的标准是用SavePicture方法产生的 24位BMP

Set ppp = LoadPicture(ThisWorkbook.Path & "\模版.bmp")'  3070大小 动过手脚的文件,这个文件用window自带的画图程序打开,后再保存就会错位
SavePicture ppp, ThisWorkbook.Path & "\模板2.bmp"   '''''''''''''''''3054大小 = 54 +100*10*3

这个说法依然成立
在你的那个模版.Bmp 中可以看到 文件头长度为69

当然出于一些原因,一些小图片后面也可以附带很大的其它文件,但只要这个图片被读取后再保存,就会恢复原始状态


另外 你所说的“  在40*10的情况下成立,但多数情况下不成立,因为BMP文件是四字节对齐方式存储的)”

这样的BMP文件能不能发一个给我研究一下,因为我所接触到的24位BMP文件,其大小都符合 54 + 长*宽*3 这个规律

[ 本帖最后由 ldy 于 2008-12-5 18:28 编辑 ]
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-21 18:37 , Processed in 0.039512 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表