行业知识
燕山大学数据结构与算法课程实践——ISBN号识别系统的设计与开发
2026-11-11 22:21:52
来源:互联网转载
项目背景
�� ISBN 号是国际标准书号的简称,它是国际标准化组织于 1972 年公布的一项国际通用的出版物统一编号方法。所有正规出版的普通图书版权页都有 ISBN 号, ISBN 是 international standard of book number 几个英文字母的缩写,即国际标准书号。这个号码印刷在每本图书封底( 或护封 ) 的右下角,由一组用四个分割线“-”隔开的 13 个数字。例如: ISBN 978-7-111-47818-8 。其中, ISBN987 代表是中国, 7 代表分类, 111代表出版社编号,47818 代表本书在出版社所有出版书中的编号, 9 是校验码,即:用 1 分别乘 ISBN 的前12 位中的奇数位,用 3 乘以偶数位,乘积之和以 10 为模,用 10 减去此模,即可得到校验位的值,其值范围为 0-9 。例如: S=9*1+7*3+8*1+7*3+1*1+1*3+1*1+4*3+7*1+8*3+1*1+8*3=132 , 132%10=2 , 10-2=8 , 因此校验码即为 8 。在该码的下方有一个条形码,条形码的下方写着 13 个数字,与 ISBN 后面的数字是相同的。任务:开发一套ISBN号识别系统
给定 100 张包含 ISBN 号的图片,建议在 VS + OpenCV 环境下完成对给定的 ISBN 图像的识别, 每幅图像的文件名为图中的 ISBN ,例如 ISBN978-7-111-47818-8.jpg. 你可以自由参考现有的文献中的方法,从设计的原理、技术方案到程序实现,给出你能识别出的ISBN 的正确率和准确率。例如:如果有 100 幅图片,你能识别出 90 幅,那么你的系统识别的正确率是 90% ;每一张照片有 13 个需要识别的数字, 100 张照片共有 1300 个需要识别的数字,你的系统识别出了 1000 个,那识别系统的准确率是 1000/1300=76.92% 。采用的研究方法及相关工具
本项目使用vs2019和OpenCV4开发,在对其进行图像的转正,然后灰度值转化,对图像进行去噪处理,再进行图像二值化的转化,对图书ISBN编号进行垂直方向数字分割,切割后的每个字符图片与模板进行匹配,实现对ISBN的快速识别。最后,计算出识别出的ISBN相应的正确率和准确率。
项目的方案设计
通过图像预处理读入图像,对其进行灰度值转化和二值化,将二值化图片进行倾斜校正,校正之后寻找到ISBN号所在区域,对源图片进行分割获得彩色ISBN号,再将其转换为二值图像,寻找ISBN号字符的边界后截取每个字符,截取后的字符通过调整最后与模板进行对比,差值最小的模板号即为读取的ISBN 号,与正确的ISBN号比较得到项目的正确率和准确率。
核心代码的实现
图像预处理:读入图片、转化为灰度图和二值图
1.int rightNums = 0, acNums = 0, sumNums=0; //1:正确的个数; 2:正确的字符个数 3:总共的字符个数 2. 3. string path1 = "C:/Users/Administrator/Desktop/二级项目/ISBN/ISBN测试数据--100幅图"; //文件路径 4. 5. vector imgPaths; 6. glob(path1, imgPaths, false); //1:文件路径 2:输出数组 3:递归遍历所有图片 7. int imgNums = imgPaths.size(); //图片总个数 8. 9. for (int i = 0; i
上一篇:揭秘全民K歌源文件打开秘籍!