91网首页-91网页版-91网在线观看-91网站免费观看-91网站永久视频-91网站在线播放

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

C# 智能車牌識別基于 OpenCvSharp 和 PaddleOCR 的實戰

admin
2025年3月20日 21:51 本文熱度 574

前言

本文將詳細介紹如何使用C#、OpenCvSharp和PaddleOCR構建一個高效的車牌識別系統,適用于車輛管理、智慧停車和交通監控等多種應用場景。

車牌識別技術

車牌識別(License Plate Recognition, LPR)是計算機視覺領域的重要應用,通過圖像處理和光學字符識別(OCR)技術,自動提取并識別車輛牌照上的字符信息。該技術廣泛應用于智慧城市、智能交通管理和安防監控等領域。車牌識別的基本流程包括:

圖像獲取:從攝像頭或視頻流中捕獲圖像。

車牌定位:檢測并定位圖像中的車牌區域。

車牌預處理:對車牌區域進行預處理,如灰度化、二值化等。

字符分割:將車牌上的字符逐一分割出來。

字符識別:使用OCR技術識別分割出的字符。

技術棧

車牌識別系統主要基于以下技術:

OpenCvSharp4:用于圖像處理的開源庫。

OpenCvSharp4.Extensions:增強圖像處理功能的擴展庫。

OpenCvSharp4.runtime.win:Windows平臺運行時支持。

PaddleOCRSharp:高精度OCR引擎,簡化文字識別過程。

System.Drawing:用于圖像繪制和展示結果。

基本流程

一個完整的車牌識別系統通常包含以下幾個步驟:

圖像采集:從攝像頭或視頻流中獲取圖像數據。

圖像預處理:對圖像進行必要的預處理操作,如縮放、去噪等。

車牌定位:檢測并定位圖像中的車牌區域。

字符分割:將車牌區域中的字符逐一分割。

字符識別:使用OCR技術識別分割出的字符。

結果輸出:將識別結果輸出或存儲到數據庫中。

完整代碼

using System.Drawing;
using System;
using OpenCvSharp;
using Size = OpenCvSharp.Size;
using Rect = OpenCvSharp.Rect;
using Point = OpenCvSharp.Point;

namespaceAppLicensePlate
{
    internalclassProgram
    {
        static void Main(string[] args)
        {
            DetectBlueRectangles("v2.jpg");
        }

        public static void DetectBlueRectangles(string imagePath)
        {
            using (Mat image = Cv2.ImRead(imagePath))
            {
                using (Mat hsvImage = new Mat())
                {
                    Cv2.CvtColor(image, hsvImage, ColorConversionCodes.BGR2HSV);
                    Cv2.GaussianBlur(hsvImage, hsvImage, new Size(55), 0);

                    // 調整HSV邊界根據實際情況  
                    Scalar lowerBlue = new Scalar(1007070);  // 使用更具體的下邊界  
                    Scalar upperBlue = new Scalar(140255255); // 上邊界保持不變  

                    using (Mat blueMask = new Mat())
                    {
                        Cv2.InRange(hsvImage, lowerBlue, upperBlue, blueMask);

                        // 形態學操作:去噪  
                        using (Mat kernel = Cv2.GetStructuringElement(MorphShapes.Rect, new Size(55)))
                        {
                            Cv2.MorphologyEx(blueMask, blueMask, MorphTypes.Close, kernel);
                            Cv2.MorphologyEx(blueMask, blueMask, MorphTypes.Open, kernel);
                        }

                        // 查找輪廓  
                        Cv2.FindContours(blueMask, out Point[][] contours, out HierarchyIndex[] hierarchy, RetrievalModes.External, ContourApproximationModes.ApproxSimple);
                        foreach (var contour in contours)
                        {
                            var approxContour = Cv2.ApproxPolyDP(contour, Cv2.ArcLength(contour, true) * 0.05true);
                            if (approxContour.Length == 4)
                            {
                                Rect boundRect = Cv2.BoundingRect(approxContour);

                                // 計算區域面積  
                                double area = Cv2.ContourArea(contour);
                                float aspectRatio = (float)boundRect.Width / boundRect.Height;

                                // 添加多個閾值條件  
                                if (area > 1000 && aspectRatio >= 2 && aspectRatio <= 5)
                                {
                                    // 在源圖像中確認背景顏色是否偏離標準藍色  
                                    Mat roi = new Mat(image, boundRect);
                                    Scalar meanColor = Cv2.Mean(roi);

                                    if (meanColor[0] > 60 && meanColor[1] < 100 && meanColor[2] < 100// 檢查藍色分量是否占優  
                                    {
                                        Cv2.Rectangle(image, boundRect, Scalar.Red, 2);
                                        // 文字識別預處理  
                                        using (Mat grayRoi = new Mat())
                                        {
                                            Cv2.CvtColor(roi, grayRoi, ColorConversionCodes.BGR2GRAY);
                                            Cv2.Threshold(grayRoi, grayRoi, 0255, ThresholdTypes.Otsu);
                                            // 保存臨時文件用于OCR識別  
                                            string tempImagePath = "temp_plate.png";
                                            Cv2.ImWrite(tempImagePath, grayRoi);
                                            var text = new PaddleOCRSharp.PaddleOCREngine().DetectText(tempImagePath).Text;
                                            using (System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(image.Width, image.Height))
                                            {
                                                using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap))
                                                {
                                                    // 復制OpenCV圖像到Bitmap  
                                                    using (System.Drawing.Bitmap temp = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(image))
                                                    {
                                                        g.DrawImage(temp, 00);
                                                    }

                                                    // 設置文本樣式  
                                                    System.Drawing.Font font = new System.Drawing.Font("SimHei"20, System.Drawing.FontStyle.Bold);
                                                    System.Drawing.Brush brush = System.Drawing.Brushes.Yellow;
                                                    System.Drawing.StringFormat format = new System.Drawing.StringFormat();

                                                    // 繪制帶有背景的文本,提高可讀性  
                                                    System.Drawing.RectangleF rectF = new System.Drawing.RectangleF(
                                                        boundRect.X, boundRect.Y + boundRect.Height + 5, boundRect.Width, 40);
                                                    g.FillRectangle(System.Drawing.Brushes.Black, rectF);
                                                    g.DrawString(text, font, brush, rectF, format);
                                                }

                                                // 將Bitmap轉換回OpenCV格式  
                                                using (Mat newImage = OpenCvSharp.Extensions.BitmapConverter.ToMat(bitmap))
                                                {
                                                    newImage.CopyTo(image);
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }

                        Cv2.ImShow("Blue Rectangle & Plate Text Detection", image);
                        Cv2.WaitKey(0);
                        Cv2.DestroyAllWindows();
                    }

                }
            }
        }
    }
}

?注意:中文直接通過OpenCvSharp繪制顯示有問題,不支持中文字符。

優化與實用技巧

HSV顏色空間調優

HSV顏色空間對于車牌識別非常重要,不同光照條件下可能需要調整參數:

形態學操作的核大小選擇

形態學操作的核大小直接影響處理效果:

較小的核(3×3):保留更多細節,但可能無法有效去除噪點

較大的核(7×7或更大):噪點去除效果好,但可能導致細節丟失

根據圖像分辨率和質量,可動態調整核大小:

車牌傾斜校正

在實際應用中,車牌可能存在一定的傾斜角度,可以通過以下方法校正:

自適應車牌定位參數

不同場景下的車牌特征可能有所不同,可以設計自適應參數調整機制:

總結

本文詳細介紹了基于C#和OpenCVSharp實現車牌識別系統的完整過程。從圖像預處理、車牌定位到字符識別,我們采用了一系列計算機視覺和圖像處理技術。雖然示例中主要針對中國藍色車牌,但通過調整相關參數,同樣適用于其他類型車牌的識別。車牌識別技術正在各行各業發揮越來越重要的作用。


閱讀原文:原文鏈接


該文章在 2025/3/21 10:40:16 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 国产午夜激情视频 | 欧美最新免费一区 | 日韩午夜性片 | 欧美午夜理伦三 | 国产精品专区五 | 成人日本在线观看 | 国产精品美女www | 国产香港日 | 国产v亚洲v天堂 | 精品国产一二三区 | 91情侣在线精品 | 看中文欧美性爱大片 | 国产专区日韩欧美色 | 国产午夜手| 日韩视频一区二区 | 成人福利国产视频 | 91五月天极品| 国产免费区在 | 国产初次视频观看 | 日韩在线欧美网 | 精品尤物视频 | 91福利午夜| 精品在线视频 | 国产精品大战 | 99有精品| 欧美日韩不卡一区 | 国产在线91| 日韩视频免费在线 | 91免费版安装 | 国产精品同性女性 | 国产日韩欧美另类 | 国拍在线精品 | 91青青草原| 国内精品露脸在线 | 热99r| 成人影院免 | 国产21区 | 日韩伦理电影大全 | 黑人一级| 午夜国产精品看片 | 九七电影网在线 |