Emgucv粗略抠取车牌
生活随笔
收集整理的這篇文章主要介紹了
Emgucv粗略抠取车牌
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2019獨角獸企業重金招聘Python工程師標準>>>
using?System; using?System.Collections.Generic; using?System.Linq; using?System.Text; using?System.Threading.Tasks; using?Emgu.CV; using?Emgu.CV.Structure; using?Emgu.Util; using?System.Drawing; using?Emgu.CV.Util; using?System.Collections; namespace?Final.Tool {class?Pictrue{public?static?ArrayList?list?=?new?ArrayList();public?static?void?preDeal(String?path)?{list.Clear();Image<Bgr,?byte>?src?=?new?Image<Bgr,?byte>(path);Image<Gray,?byte>?graySrc?=?src.Convert<Gray,?byte>();//CvInvoke.cvSmooth(graySrc.Ptr,graySrc.Ptr,Emgu.CV.CvEnum.SMOOTH_TYPE.CV_GAUSSIAN,3,3,0,0);Image<Gray,?byte>?sobel?=?new?Image<Gray,?byte>(path);CvInvoke.cvSobel(graySrc.Ptr,sobel.Ptr,2,0,3);CvInvoke.cvNamedWindow("sobel");CvInvoke.cvShowImage("sobel",?sobel);CvInvoke.cvThreshold(sobel.Ptr,sobel.Ptr,0,255,Emgu.CV.CvEnum.THRESH.CV_THRESH_OTSU);//自定義1*3的核進行X方向的膨脹腐蝕IntPtr?mask?=CvInvoke.cvCreateStructuringElementEx(3,?1,?1,?0,Emgu.CV.CvEnum.CV_ELEMENT_SHAPE.CV_SHAPE_RECT,?new?IntPtr());//自定義一個核CvInvoke.cvDilate(sobel.Ptr,?sobel.Ptr,?mask,?10);//X方向膨脹連通數字CvInvoke.cvErode(sobel.Ptr,?sobel.Ptr,?mask,?16);//X方向腐蝕去除碎片CvInvoke.cvDilate(sobel.Ptr,?sobel.Ptr,?mask,?10);?//X方向膨脹回復形態//自定義3*1的核進行Y方向的膨脹腐蝕mask?=CvInvoke.cvCreateStructuringElementEx(1,?3,?0,?1,Emgu.CV.CvEnum.CV_ELEMENT_SHAPE.CV_SHAPE_RECT,?new?IntPtr());//自定義一個核CvInvoke.cvErode(sobel.Ptr,?sobel.Ptr,?mask,?1);//?Y方向腐蝕去除碎片CvInvoke.cvDilate(sobel.Ptr,?sobel.Ptr,?mask,?6);//回復形態CvInvoke.cvNamedWindow("sobel2");CvInvoke.cvShowImage("sobel2",?sobel);//輪廓檢測:IntPtr?storage?=?CvInvoke.cvCreateMemStorage(0);MCvSeq?comp1?=?new?MCvSeq();comp1.ptr?=?new?IntPtr();IntPtr?Dyncontour?=?new?IntPtr();int?n?=?CvInvoke.cvFindContours(sobel.Ptr,storage,ref?Dyncontour,?StructSize.MCvContour,Emgu.CV.CvEnum.RETR_TYPE.CV_RETR_CCOMP,?Emgu.CV.CvEnum.CHAIN_APPROX_METHOD.CV_CHAIN_APPROX_NONE,new?Point(0,?0));Seq<Point>?DyncontourTemp1?=?new?Seq<Point>(Dyncontour,?null);//方便對IntPtr類型進行操作Seq<Point>?DyncontourTemp=DyncontourTemp1;Image<Bgr,?byte>?tempContImg?=?new?Image<Bgr,?byte>(path);double?area;for?(;?DyncontourTemp?!=?null?&&?DyncontourTemp.Ptr.ToInt32()?!=?0;?DyncontourTemp?=?DyncontourTemp.HNext){Rectangle?rect?=?CvInvoke.cvBoundingRect(DyncontourTemp,?false);if?(rect.Width?>?2.8?*?rect.Height?&&?rect.Width?<?3.5?*?rect.Height)//{//摳到圖了Image<Bgr,?byte>?dst?=?new?Image<Bgr,?byte>(rect.Width,rect.Height);CvInvoke.cvSetImageROI(tempContImg.Ptr,rect);CvInvoke.cvCopy(tempContImg.Ptr,dst.Ptr,new?IntPtr());list.Add(dst);CvInvoke.cvSaveImage("p1.jpg",dst,new?IntPtr());CvInvoke.cvResetImageROI(tempContImg);}CvInvoke.cvDrawContours(tempContImg.Ptr,?DyncontourTemp,?new?MCvScalar(255,?255,?255),?new?MCvScalar(255,?255,?255),?0,?1,Emgu.CV.CvEnum.LINE_TYPE.EIGHT_CONNECTED,?new?Point(0,?0));}//Rectangle?rect?=?CvInvoke.cvBoundingRect(DyncontourTemp,?false);CvInvoke.cvShowImage("cont",tempContImg);}?} }這段代碼可以摳出類似車牌的矩形框,不過因為本人有點賴,沒有把所有摳出來的矩形保存為圖片,只保存了第一個摳出來的矩形,有興趣的人在實際運行的時候再修改修改。
轉載于:https://my.oschina.net/swchenyuzhe/blog/260934
總結
以上是生活随笔為你收集整理的Emgucv粗略抠取车牌的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows Server 2012
- 下一篇: Node.js 的http.server