OpenCV下车牌定位算法实现.docOpe nCV下车牌定位算法实现代码(一)
车牌定位算法在车牌识别技术中占有很重要地位, 一个车牌识别系统的识别率往往取决
于车牌定位的成功率及准确度。
车牌定位有很多种算法, 从最简单的来,车牌在图像中一般被认为是长方形, 由于图像
摄取角度不同也可 能是四边形。我们可 以使用 Ope nCV中的实例:C:\Program
Files'OpenCV\samples\。我们只要稍微修改 一下就可以实现定位车牌。
在这个实例中使用了 canny算法进行边缘检测,然后二值化,接着用 cvFindContours搜
索轮廓,最后从找到的轮廓中根据角点的个数, 角的度数和轮廓大小确定, 矩形位置。以下
是效果图:
= - " "- 1
■ Gzp Pl Mtfc ■ Lil
这个算法可以找到一些车牌位置,但在复杂噪声背景下,或者车牌图像灰度与背景相差 不大就很难定位车牌。所以我们需要寻找更好的定位算法。下面是 squares的代码:
#ifdef _CH_
#pragma package <ope ncv>
#en dif
#ifndef _EiC
#i nclude ""
#i nclude ""
#i nclude <>
#in clude <>
#include <>
#endif
int thresh = 50;
IplImage* img = 0;
IplImage* img0 = 0;
CvMemStorage* storage = 0;
CvPoint pt[4];
const char* wndname = "Square Detection Demo";
// helper function:
// finds a cosine of angle between vectors
// from pt0->pt1 and from pt0->pt2
double angle( CvPoint* pt1, CvPoint* pt2, CvPoint* pt0 )
{
double dx1 = pt1->x - pt0->x;
double dy1 = pt1->y - pt0->y;
double dx2 = pt2->x - pt0->x;
double dy2 = pt2->y - pt0->y;
-10);
return (dx1*dx2 + dy1*dy2)/sqrt((dx1*dx1 + dy1*dy1)*(dx2*dx2 + dy2*dy2) + 1e }
// returns sequence of squares detected on the image.
// the sequence is stored in the specified memory storage
CvSeq* findSquares4( IplImage* img, CvMemStorage* storage )
{
CvSeq* contours;
int i, c, l, N = 11;
CvSize sz = cvSize(
OpenCV下车牌定位算法实现 来自淘豆网m.daumloan.com转载请标明出处.