全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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 private Tesseract _ocr; / / Create a license plate detector / public LicensePlateDetector() /create OCR _ocr = new Tesseract(); /You can download more language definition data from //p/tesseract-ocr/downloads/list /Languages supported includes: /Dutch, Spanish, German, Italian, French and English _ocr.Init(eng, false); / / Detect license 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 is stored / 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 (Image 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, 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 = 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) FindLicensePlate(child, gray, canny, licensePlateList, filteredLicensePlateList, 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 != 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.Add(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) LineSegment2D 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) return 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) 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); contours != null; contours = contours.HNext) Rectangle rect = contours.BoundingRectangle; if (rect.Height (plate.Height 1) rect.X -= 1; rect.Y -= 1; rect.Width += 2; rect.Heigh
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 综合物流枢纽示范工程施工方案
- 2026年中国云通信业务项目经营分析报告
- 城区排涝泵站工程实施方案
- 2026年中国虎纹蛙养殖项目经营分析报告
- 2025中国中煤能源集团有限公司西南分公司(四川分公司)第七批招聘2人笔试考试参考题库附答案解析
- 2025山东德州市直机关幼儿园招聘幼儿教师2人考试笔试参考题库附答案解析
- 2025四川绵阳盐亭县人民医院卫生专业技术人员招聘6人考试笔试备考题库及答案解析
- 2025年江苏省南通如皋市生物高二第一学期期末调研模拟试题含解析
- 安徽工贸职业技术学院《高尔夫球具维护》2024-2025学年第一学期期末试卷
- 四川文理学院《导游原理与实务》2024-2025学年第一学期期末试卷
- 2025届高考物理二轮复习热点题型归类:光学
- 企业文化的内部传播与外部推广
- 急性心力衰竭抢救流程
- 光伏电站设计合同范本
- 高考120个文言实词
- 卡通小蝌蚪找妈妈儿童绘本
- 《冷水机培训》课件
- 陶渊明诗歌英译比较
- 《医学影像检查技术学》课件-肘关节X线摄影
- 《糖尿病足护理查房》课件
- 《褐藻酸寡糖含量的测定》
评论
0/150
提交评论