版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。
EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。
教程VB.net版本请访问:
教程C#版本请访问:
笔者的博客网址:https:///uruseibest
教程配套文件及相关说明以及如何获得pdf教程和代码,请移步:
学习VB.Net知识,请移步:
学习C#知识,请移步:
QRCodeDetector类是Emgu CV库中用于检测和解码二维码的类。
常用方法:
1、Detect方法:检测图像中的QR二维码
public bool Detect(
IInputArray input,
IOutputArray points
)
参数说明:
该方法执行成功,将返回二维码四个顶点坐标。
【代码位置:frmChapter12】Button1_Click
//二维码检测
private void Button1_Click(object sender, EventArgs e)
{
QRCodeDetector qr = new QRCodeDetector();
//需要测试的图像文件
Mat m = new Mat("C:\\learnEmgucv\\qrcode1.png", ImreadModes.Color);
VectorOfPoint vp = new VectorOfPoint();
//返回二维码四个顶点坐标
if (qr.Detect(m, vp) == false)
return;
//或者:
//Mat p = new Mat();
//if (qr.Detect(m, p) == false)
// return;
CvInvoke.Line(m, vp[0], vp[1], new MCvScalar(255, 0, 0), 2);
CvInvoke.Line(m, vp[1], vp[2], new MCvScalar(255, 0, 0), 2);
CvInvoke.Line(m, vp[2], vp[3], new MCvScalar(255, 0, 0), 2);
CvInvoke.Line(m, vp[3], vp[0], new MCvScalar(255, 0, 0), 2);
ImageBox1.Image = m;
}
输出结果如下图所示:
图12-1 获得二维码坐标位置
2、Decode方法:用于解码获得的QR二维码的内容。
public string Decode(
IInputArray image,
IInputArray points,
IOutputArray straightQrcode = null
)
参数说明:
该法方法执行成功,将返回二维码的文字内容。
【代码位置:frmChapter12】Button2_Click
//二维码识别
private void Button2_Click(object sender, EventArgs e)
{
QRCodeDetector qr = new QRCodeDetector();
//需要测试的图像文件
Mat m = new Mat("C:\\learnEmgucv\\qrcode2.png", ImreadModes.Color);
VectorOfPoint vp = new VectorOfPoint();
//返回二维码四个顶点坐标
if (qr.Detect(m, vp) == false)
return;
Mat mout1 = m.Clone();
CvInvoke.Line(mout1, vp[0], vp[1], new MCvScalar(255, 0, 0), 2);
CvInvoke.Line(mout1, vp[1], vp[2], new MCvScalar(255, 0, 0), 2);
CvInvoke.Line(mout1, vp[2], vp[3], new MCvScalar(255, 0, 0), 2);
CvInvoke.Line(mout1, vp[3], vp[0], new MCvScalar(255, 0, 0), 2);
ImageBox1.Image = mout1;
string strout;
Mat mout2 = new Mat();
strout = qr.Decode(m, vp, mout2);
ImageBox2.Image = mout2;
MessageBox.Show(strout);
}
输出结果如下图所示:
图12-2 获得二维码信息
QRCodeDetector类也提供了同时对多个二维码检测和解码的方法,但是经过测试,效果不好。可以使用WeChatQRCode类来代替(请参看12.2节【WeChatQRCode】)。