概述:本教程使用OpenCvSharp和ZXing庫,詳細介紹了在C#中識別二維碼和條形碼的步驟。通過導入必要的命名空間、載入圖像,並使用ZXing庫進行二維碼和條形碼的識別,提供了清晰的示例代碼。這方便了開發人員在項目中集成二維碼和條形碼識別功能。 要使用OpenCvSharp來分別識別二維碼和條 ...
概述:本教程使用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();
}
}
運行效果:
請註意,示例中的路徑 "path_to_your_image.jpg" 應替換為你實際圖像文件的路徑。此外,確保圖像中包含有效的二維碼或條形碼。