我在 Visual Studio 上使用 Emgu CV v4.6 和 C# 6.0。我需要使用 Emgu CV 扫描 QR 码,但我不知道如何使用函数 Emgu.CV.QRCodeDetector.Detect 和 Emgu.CV.QRCodeDetector.Decode。在文档中,据说 Decode() 需要 Detect() 方法找到的四边形顶点,而 Detect() 只返回一个 bool (告诉是否检测到 QR 码),我们无法访问 QRCodeDetector 对象中的任何内容。
这是我当前的上下文代码:
Image<Bgr, Byte> img1 = new Image<Bgr, Byte>(@"C:\Users\Dacapo\source\repos\qrcode_reading\qrcode_reading\qr.jpg");
IInputArray img1arr = img1;
Mat pos = new Mat(1, 2, Emgu.CV.CvEnum.DepthType.Cv32S, 1);
QRCodeDetector detector = new QRCodeDetector();
bool decoded = detector.Detect(img1arr, pos); //this returns true
根据他们的文档:https://www.emgu.com/wiki/files/4.6.0/document/html/Methods_T_Emgu_CV_BarcodeDetector.htm现在有一个 DetectAndDecode() 方法可以接受两次重载。希望这可以帮助。我目前正在研究类似的实现,因此我将在这里报告任何进展。
添加这些包:
<PackageReference Include="Emgu.CV" Version="4.8.1.5350" />
<PackageReference Include="Emgu.CV.runtime.windows" Version="4.8.1.5350" />
上传图片时:
using var image = new Image<Bgr, byte>(ImageUrl);
// Detect QR code
var qrCodeDetector = new QRCodeDetector();
Mat points = new Mat(1, 2, Emgu.CV.CvEnum.DepthType.Cv32S, 1);
var detected = qrCodeDetector.Detect(image, points);
if (detected)
{
// Decode QR code
var decodedText = qrCodeDetector.Decode(image, points);
Console.WriteLine($"Decoded QR code: {decodedText}");
}