C#中轻松实现二维码和条形码识别:OpenCvSharp和ZXing详细教程

  • C#中轻松实现二维码和条形码识别:OpenCvSharp和ZXing详细教程已关闭评论
  • 92 次浏览
  • A+
所属分类:.NET技术
摘要

 概述: 本教程使用OpenCvSharp和ZXing库,详细介绍了在C#中识别二维码和条形码的步骤。通过导入必要的命名空间、加载图像,并使用ZXing库进行二维码和条形码的识别,提供了清晰的示例代码。这方便了开发人员在项目中集成二维码和条形码识别功能。

C#中轻松实现二维码和条形码识别:OpenCvSharp和ZXing详细教程

 

概述:本教程使用OpenCvSharp和ZXing库,详细介绍了在C#中识别二维码和条形码的步骤。通过导入必要的命名空间、加载图像,并使用ZXing库进行二维码和条形码的识别,提供了清晰的示例代码。这方便了开发人员在项目中集成二维码和条形码识别功能。

要使用OpenCvSharp来分别识别二维码和条形码,首先需要确保已经安装了OpenCvSharp库。你可以通过以下步骤在C#中使用OpenCvSharp来实现这两种识别。

步骤 1:安装 OpenCvSharp

在 Visual Studio 中,通过 NuGet 包管理器安装 OpenCvSharp。右击项目 -> NuGet 包管理器 -> 管理 NuGet 包,搜索 OpenCvSharp 并安装。

步骤 2:导入必要的命名空间

在代码文件的开头,导入必要的命名空间。

using OpenCvSharp; using OpenCvSharp.Extensions; using ZXing;

步骤 3:加载图像

加载包含二维码或条形码的图像。

Mat image = new Mat("path_to_your_image.jpg");

步骤 4:二维码识别

使用 ZXing 库来识别二维码。

        /// <summary>         /// 只识别二维码         /// </summary>         static void DecodeQRCodes()         {             var img = Cv2.ImRead("2.jpg");             string[] qrCodeTexts = null;             //二维码识别             using (QRCodeDetector qRCodeDetector = new QRCodeDetector())             {                 Point2f[] points;                 var hasQRCode = qRCodeDetector.DetectMulti(img, out points);                 if (hasQRCode)                 {                     qRCodeDetector.DecodeMulti(img, points, out qrCodeTexts);                 }             }              if (qrCodeTexts != null)             {                 Console.WriteLine($"检测到{qrCodeTexts.Length}个二维码:");                 for (int i = 0; i < qrCodeTexts.Length; i++)                 {                     Console.WriteLine($"第{(i + 1)}个的内容为:{qrCodeTexts[i]}");                 }             }         }

步骤 5:条形码识别

使用 ZXing 库来识别条形码。

        /// <summary>         /// 识别条码(也可以识别二维码)         /// </summary>         static void DecodeBarCodes()         {             // 读取图像             var img = Cv2.ImRead("1.jpg");              BarcodeReader barcodeReader = new BarcodeReader             {                 Options = new DecodingOptions                 {                     TryHarder = true,                     PossibleFormats = new[]                     {                         BarcodeFormat.CODE_128,                         BarcodeFormat.QR_CODE,//这个是二维码                         BarcodeFormat.EAN_13,                         BarcodeFormat.EAN_8,                         BarcodeFormat.CODE_39,                         BarcodeFormat.CODE_93                     }                 },                 AutoRotate = true,             };              // 进行条形码解码             var barcodes = barcodeReader.DecodeMultiple(img);              if (barcodes != null)             {                 Console.WriteLine($"检测到{barcodes.Length}个条码:");                 for (int i = 0; i < barcodes.Length; i++)                 {                     Console.WriteLine($"第{(i + 1)}个的内容为:{barcodes[i].Text},格式为:{barcodes[i].BarcodeFormat}");                 }             }         }

示例代码

下面是完整的示例代码,其中包括了加载图像、二维码识别和条形码识别的步骤:

using System; using OpenCvSharp; using OpenCvSharp.Extensions; using ZXing;  class Program {         static void Main()         {             Action action = () =>             {                 DecodeQRCodes();             };              Action action2 = () =>             {                 DecodeBarCodes();             };              long executionTime_qrcode = action.GetExecutionTimer();              Console.WriteLine();              long executionTime_barcode = action2.GetExecutionTimer();              Console.WriteLine();             Console.WriteLine($"识别二维码用时{executionTime_qrcode}毫秒,条件用时{executionTime_barcode}毫秒");             Console.ReadKey();         } }

运行效果:

C#中轻松实现二维码和条形码识别:OpenCvSharp和ZXing详细教程

 

请注意,示例中的路径 "path_to_your_image.jpg" 应替换为你实际图像文件的路径。此外,确保图像中包含有效的二维码或条形码。

 

C#中轻松实现二维码和条形码识别:OpenCvSharp和ZXing详细教程