在线识别二维码(在线扫描)

在线识别二维码(在线扫描)自从手机APP二维码支付进入了人们的日常生活,方便又安全,真的是无处不在。 尤其是1994年日本Denso Wave发明的二维码(快速响应),因为易于检测,写入信息量大,提供强大的纠错机制,所以应用…

大家好,我是讯享网,很高兴认识大家。

自从手机APP二维码支付进入了人们的日常生活,方便又安全,真的是无处不在。

尤其是1994年日本Denso Wave发明的二维码(快速响应),因为易于检测,写入信息量大,提供强大的纠错机制,所以应用最为广泛。可以说是第一个也是最大的图像识别应用。

QR码的检测和解码已经成为许多应用的必要条件。面对众多开源库,哪一个更好?

我们比较了五个有影响力的开源库中的检测算法。

参与开源库的比较:

BoofCV(版本0.33):用Java实现的开源实时计算机视觉库;

http://boofcv.org/

opencv(ver . 4 . 0 . 1):opencv 4.0后增加了二维码检测解码功能,用C++实现;

http://opencv.org/

quirc(2018年2月1日。SHA db):一个二维码检测解码的库,用C语言实现;

ZBar(版本。0.10):广泛使用的包含各种条码检测识别的专用库,支持各种平台,Python,Perl,C++等语言;

ZXing(版本。3.3.3):为Java Android开发的条码检测识别库,用Java开发,支持多种语言;

为了综合比较各开源库检测二维码的性能,笔者收集了大量应用中常见的情况。

每个类别中包含的图像数量:

作者以10%为阈值匹配检测位置和标签位置来定义检测成功,并计算真阳性、假阳性、真阴性和假阴性,最后计算F-Measure来比较检测结果。

按类别统计测试结果:

不分类别的全球统计数据:

可见没有哪个库比其他的好,但大多数情况下BoofCV是最好的或者接近最好的。在大多数品类上,Zbar优于ZXing,但ZXing最好的品类还不够好。Quirc在正常情况下表现不错,但是其他库中表现最好的类别就不太好了。OpenCV无疑永远是最差的。

检测速度结果对比:

在哪个类别中,性能都是一致的,ZXing是最快的库,BoofCV次之。OpenCV的速度表现很稳定,最慢。。。

结论:

选择哪个库取决于您的应用程序。如果二维码比对标准推荐BoofCV,其检测准确率高,速度好。如果二维码比较脏或者外观有变化,ZXing是个不错的选择。如果只能用C ++,建议用Zbar。

让我们选择一个Zbar进行实验:

环境:VS2010,OpenCV2.4.9,Zbar环境配置

环境描述:

1.OpenCV是机器视觉的开源类库,广泛应用于图像处理、模式识别等领域。它是Zbar项目的核心。我这里用的是OpenCV2.4.9。(不推荐OpenCV1版本1)

2.集成开发工具。(不推荐Visual C++ 6.0,因为它只支持OpenCV1.0版)。创建一个新的C++控制台应用程序,设置相应的工程属性,并添加包含目录、附加链接等。

3.测试程序如下:

#include “zbar.h” #include “cv.h” #include “highgui.h” #include <iostream> using namespace std; using namespace zbar; using namespace cv; int main(void) { ImageScanner scanner; scanner.set_config(ZBAR_NONE, ZBAR_CFG_ENABLE, 1); char file[256]; cin>>file; Mat img = imread(file,0); Mat imgout; cvtColor(img,imgout,CV_GRAY2RGB); int width = img.cols; int height = img.rows; uchar *raw = (uchar *)img.data; Image image(width, height, “Y800”, raw, width * height); int n = scanner.scan(image); for(Image::SymbolIterator symbol = image.symbol_begin();symbol != image.symbol_end();symbol++) { vector<Point> vp; cout<<“Decoded:êo”<<endl<<symbol->get_type_name()<<endl<<endl; cout<<“Symbol:êo”<<endl<<symbol->get_data()<<endl<<endl; int n = symbol->get_location_size(); for(int i=0;i<n;i++) { vp.push_back(Point(symbol->get_location_x(i),symbol->get_location_y(i))); } RotatedRect r = minAreaRect(vp); Point2f pts[4]; r.points(pts); Point textPoint(pts[1]); string codeNum=symbol->get_data(); for(int i=0;i<4;i++) { line(imgout,pts[i],pts[(i+1)%4],Scalar(255,0,0),3); textPoint.x>=pts[i].x?textPoint.x=pts[i].x:textPoint.x=textPoint.x; textPoint.y>=pts[i].y?textPoint.y=pts[i].y:textPoint.y=textPoint.y; putText(imgout,codeNum,textPoint,FONT_HERSHEY_COMPLEX,1,Scalar(0,0,255),1,8,false); } cout<<“Angle: “<<r.angle<<endl; } imshow(“imgout.jpg”,imgout); waitKey(); }

# include ” zbar . h ” # include ” cv . h ” # include ” high GUI . h ” # include & lt;iostream & gt使用命名空间std使用名称空间zbar使用名称空间cv;int main(void){ image scanner scanner;scanner.set_config(ZBAR_NONE,ZBAR_CFG_ENABLE,1);char文件[256];CIN & gt;& gt文件;Mat img = imread(file,0);Mat imgoutcvtColor(img,imgout,CV _ gray 2r GB);int width = img.colsint height = img.rowsuchar * raw =(uchar *)img . data;图像Image(宽度,高度,“Y800”,raw,宽度*高度);int n = scanner . scan(image);for(Image::symbol iterator symbol = Image . symbol _ begin();符号!= image . symbol _ end();symbol++){ vector & lt;点& gtVP;cout & lt& lt” Decoded:êo ” & lt;& ltendl & lt& lt符号->;get _ type _ name()& lt;& ltendl & lt& ltendlcout & lt& lt” Symbol:êo ” & lt;& ltendl & lt& lt符号->;get _ data()& lt;& ltendl & lt& ltendlint n = symbol-& gt;get_location_size()。for(int I = 0;我& ltn;i++){ VP . push _ back(Point(symbol-& gt;get_location_x(i),symbol->get _ location _ y(I)));} rotated rect r = minarerect(VP);point 2f pts[4];分数;point text point(pts[1]);string codeNum = symbol-& gt;get _ data();for(int I = 0;我& lt4;i++) { line(imgout,pts[i],pts[(i+1)%4],Scalar(255,0,0),3);textPoint.x & gt=pts[i]。x?textPoint.x=pts[i]。x:textpoint . x = textpoint . x;textPoint.y & gt=pts[i]。y?textPoint.y=pts[i]。y:textpoint . y = textpoint . y;putText(imgout,codeNum,textPoint,FONT_HERSHEY_COMPLEX,1,Scalar(0,0,255),1,8,false);} cout & lt& lt”角度:” & lt& ltr.angle & lt& ltendl} imshow(“imgout.jpg “,imgout);wait key();}

4.王先生变成了嵌入文字信息的二维码。

运行测试程序,如下所示:

尝试另一个URL:

你可以自己试试。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。
本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://51itzy.com/5020.html
(0)
上一篇 2024年 10月 6日 22:12
下一篇 2024年 10月 6日 22:32

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注