车牌识别emgucv

上传人:每**** 文档编号:59806630 上传时间:2022-03-05 格式:DOCX 页数:5 大小:27.67KB
收藏 版权申诉 举报 下载
车牌识别emgucv_第1页
第1页 / 共5页
车牌识别emgucv_第2页
第2页 / 共5页
车牌识别emgucv_第3页
第3页 / 共5页
资源描述:

《车牌识别emgucv》由会员分享,可在线阅读,更多相关《车牌识别emgucv(5页珍藏版)》请在装配图网上搜索。

1、using System;using System.Collections.Generic;using System.Text;using System.Drawing;using Emgu.Util;using Emgu.CV;using Emgu.CV.Structure;using tessnet2;using System.Diagnostics; namespace LicensePlateRecognition / / A license plate detector / public class LicensePlateDetector : DisposableObject pr

2、ivate Tesseract _ocr; / / Create a license plate detector / public LicensePlateDetector() /create OCR _ocr = new Tesseract(); /You can download more language definition data from / /Languages supported includes: /Dutch, Spanish, German, Italian, French and English _ocr.Init(eng, false); / / Detect l

3、icense plate from the given image / / The image to search license plate from / A list of images where the detected license plate region is stored / A list of images where the detected license plate region with noise removed is stored / A list where the region of license plate, defined by an MCvBox2D

4、 is stored授课:XXX / The list of words for each license plate public ListList DetectLicensePlate(Image img, ListImage licensePlateList, ListImage filteredLicensePlateList, List boxList) /Stopwatch w = Stopwatch.StartNew(); ListList licenses = new ListList(); using (Image gray = img.Convert() using (Im

5、age canny = new Image(gray.Size) using (MemStorage stor = new MemStorage() CvInvoke.cvCanny(gray, canny, 100, 50, 3); Contour contours = canny.FindContours( Emgu.CV.CvEnum.CHAIN_APPROX_METHOD.CV_CHAIN_APPROX_SIMPLE, Emgu.CV.CvEnum.RETR_TYPE.CV_RETR_TREE, stor); FindLicensePlate(contours, gray, canny

6、, licensePlateList, filteredLicensePlateList, boxList, licenses); /w.Stop(); return licenses; private void FindLicensePlate( Contour contours, Image gray, Image canny, ListImage licensePlateList, ListImage filteredLicensePlateList, List boxList, ListList licenses) for (; contours != null; contours =

7、 contours.HNext) Contour approxContour = contours.ApproxPoly(contours.Perimeter * 0.05, contours.Storage); if (approxContour.Area 100 & approxContour.Total = 4) /img.Draw(contours, new Bgr(Color.Red), 1); if (!IsParallelogram(approxContour.ToArray() Contour child = contours.VNext; if (child != null)

8、 FindLicensePlate(child, gray, canny, licensePlateList, 授课:XXXfilteredLicensePlateList, boxList, licenses); continue; MCvBox2D box = approxContour.GetMinAreaRect(); double whRatio = (double)box.size.Width / box.size.Height; if (!(3.0 whRatio & whRatio 8.0) Contour child = contours.VNext; if (child !

9、= null) FindLicensePlate(child, gray, canny, licensePlateList, filteredLicensePlateList, boxList, licenses); continue; Image plate = gray.Copy(box); Image filteredPlate = FilterPlate(plate); List words; using (Bitmap bmp = filteredPlate.Bitmap) words = _ocr.DoOCR(bmp, filteredPlate.ROI); licenses.Ad

10、d(words); licensePlateList.Add(plate); filteredLicensePlateList.Add(filteredPlate); boxList.Add(box); / / Check if the four points forms a parallelogram / / The four points that defines a polygon / True if the four points defines a parallelogram private static bool IsParallelogram(Point pts) LineSeg

11、ment2D edges = PointCollection.PolyLine(pts, true); double diff1 = Math.Abs(edges0.Length - edges2.Length); double diff2 = Math.Abs(edges1.Length - edges3.Length); if (diff1 / edges0.Length = 0.05 & diff1 / edges2.Length = 0.05 & diff2 / edges1.Length = 0.05 & diff2 / edges3.Length = 0.05)授课:XXX ret

12、urn true; return false; / / Filter the license plate to remove noise / / The license plate image / License plate image without the noise private static Image FilterPlate(Image plate) Image thresh = plate.ThresholdBinaryInv(new Gray(120), new Gray(255); using (Image plateMask = new Image(plate.Size)

13、using (Image plateCanny = plate.Canny(new Gray(100), new Gray(50) using (MemStorage stor = new MemStorage() plateMask.SetValue(255.0); for ( Contour contours = plateCanny.FindContours( Emgu.CV.CvEnum.CHAIN_APPROX_METHOD.CV_CHAIN_APPROX_SIMPLE, Emgu.CV.CvEnum.RETR_TYPE.CV_RETR_EXTERNAL, stor); contou

14、rs != null; contours = contours.HNext) Rectangle rect = contours.BoundingRectangle; if (rect.Height (plate.Height 1) rect.X -= 1; rect.Y -= 1; rect.Width += 2; rect.Height += 2; rect.Intersect(plate.ROI); plateMask.Draw(rect, new Gray(0.0), -1); thresh.SetValue(0, plateMask); thresh._Erode(1); thresh._Dilate(1);授课:XXX return thresh; protected override void DisposeObject() _ocr.Dispose(); (注:可编辑下载,若有不当之处,请指正,谢谢!) 授课:XXX

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!