前言
本课的一个内容安排是先从原理着手,把轮廓分析讲透,然后通过一行行代码来对条形码和二维码进行定位,并最终调用zbar来进行识别。
不过本博客从另外一个角度来展开,即基于opencv4.0(可以直接调用其API,其识别部分基于开源库quirc ,感兴趣的可以自行进一步研究)来对图片中二维码进行定位和识别。这也是本课的课后作业。
代码
经过opencv API的封装,二维码的定位和识别代码变得非常简单。
Mat img = imread(img_file);
if (img.empty())
{
printf("reading image file fails \n");
return FILE_READ_FAIL;
}
QRCodeDetector QRdetecter;
vector<Point> list;
Mat res;
String str = QRdetecter.detectAndDecode(img, list, res);
for (int i = 0; i < list.size(); i++)
{
if (i == 3)
line(img, list[i], list[0], Scalar(0, 255, 0), 2);
else
line(img, list[i], list[i + 1], Scalar(0, 255, 0), 2);
}
cout << str << endl;
result_img = img;
return 0;
结果展示
输入的原始图片:
使用上述代码检测和识别的结果: