赞
踩
从零使用OpenCV快速实现简单车牌识别系统
这篇文章献给所有第一次听说车牌识别ANPR但需要短时间实现的苦逼同学们。
最近的小学期实训做的是一个车牌识别系统,说实话真不知道学校怎么想的,虽然说图像处理也算的上是数字媒体很重要的一块分支了,但咱这几年学的全是图形渲染啊。图形与图像虽然只差了一个字,但内容真是差了十万八千里了(当然这话是夸张了,事实上在使用shader进行特效渲染的最后一步往往都是在做图像处理,如Bloom, Outline, Field Depth等,但这些也只是用到了图像处理中很基础的一部分)。
小学期不到10天的时间要从零搞出个车牌识别系统,更别说我们所有组员全都有实习,老师大撒把,发了需求直接不管。当时本来还觉得这种应用广泛的东西网上肯定有现成的例子,随便改改就好,结果搜了半天,最令我崩溃的一句话就是:“这东西你要真做出来了就卖钱去吧”。擦,算了,求人不如求自己,最终在OpenCV的帮助下我看了两天资料,写了两天程序,居然就实现了,看到从原始图片中抠出车牌,再从车牌中抠出数字,再匹配出结果(这步是我同学做的),我自己都觉得神奇啊!虽然肯定是买不了钱,但还是很激动啊~~
废话不多说了,以后和我一样做这个实训项目的同学们可有福了,接下来就详细讲讲如何简单实现ANPR(Automatic Number Plate Recognition)吧。
我使用的是OpenCV 2.3.1和VS2010,下载与配置方法在opencv的中国官网www.opencv.org.cn上都有详细介绍。像这种开源库最麻烦的就是环境配置了,什么makefile这种东西我看着就头大,当然对于我这种菜鸟人家提供了CMake来帮你进行傻瓜式的一键配置,不过这对于我来说还是麻烦,毕竟还要再装个程序。幸运的是我下载的是SuperPack版本,也就是说在opencv/build目录下已经有人家编译好的全部语言、开发平台的lib, dll以及头文件。虽然很大,但是下下来就能用^_^,咱的追求就是简单,更简单!
建立工程后要做的就是在工程属性的C++目录中将相应的include文件夹,lib文件夹配置进去,另外还要链接上你需要使用的库。
看网上一片教程说在属性——链接器——输入中配置附加依赖项:opencv_calib3d231d.lib; opencv_contrib231d.lib; opencv_core231d.lib;opencv_features2d231d.lib; opencv_flann231d.lib; opencv_gpu231d.lib;opencv_highgui231d.lib; opencv_imgproc231d.lib; opencv_legacy231d.lib;opencv_ml231d.lib; opencv_objdetect231d.lib; opencv_ts231d.lib;opencv_video231d.lib。
NND,这么多哪儿记得住啊,下次新建一个工程还得网上找这篇文章拷贝粘贴么?当然不用,只少在车牌识别系统中,我们所需要的只有三个库,而且在VS中我们可以使用预编译指令连接这些库,这样在你将工程拷贝给同学的时候就不用再担心环境配置的问题了。
#pragma comment(lib, “opencv_core231d.lib”)
#pragma comment(lib, “opencv_imgproc231d.lib”)
#pragma comment(lib, “opencv_highgui231d.lib”)
core是opencv的核心库,一些主要的数据结构都在这里定义,imgproc顾名思义包含了主要的图像处理函数,highgui是一个简单的显示框架,帮助快速创建窗口显示图像等,就好像opengl中的glut。如果使用MFC框架进行显示的话需要额外添加一个类CvvImage,具体情况网上随便一搜就有,不废话了。
</
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。