二维码开源库zbar、zxing使用心得
来源:互联网 发布:淘宝卖家手机号码采集 编辑:程序博客网 时间:2024/06/08 18:47
首先说明我的测试场景是“识别打印在纸上的二维码”,在扫描结果中寻找二维码并进行识别,而不是直接让摄像头对着二维码扫描。
zbar和zxing用的都是自己从github上clone的c++源码/接口编译出来的dll,都是默认参数
再说结论:测了大概几千张图片,两个库的准确率差不多(由于图片场景的多样性,确切的准确率数字也没有什么意义),但是zbar的速度要快很多,大概是zxing的4-5倍。其实两个库的准确率都不太如人意,稍微模糊一点就无法识别,甚至有一些不模糊的图像也识别不出。相比之下,微信的识别效果就逆天了,怎么折腾都能识别出来,让我很好奇。
后来自己尝试改进识别效果,先看了一下二维码的识别原理,太复杂了,无从下手。于是尝试对图像进行预处理改进,结果只是用了一个二值化加开运算就让识别效果得到了大幅提升,让我很奇怪这么简单的预处理为什么开发人员没有去做呢?然后又继续优化了一下,发现二值化的阈值对二维码的识别非常关键,badcase通常是因为阈值不合适导致的,于是牺牲了一下性能,在识别程序中多次尝试不同阈值,最终识别效果达到了比较令人满意的结果,准确率从90%左右上升到99.8%左右,绝大部分打印不清晰导致的badcase都得到了解决,代码如下:
#include <iostream>#include <include\zbar.h>#include "opencv/cv.h"#include "opencv/highgui.h"using namespace std;using namespace cv;using namespace zbar;//zbar接口string ZbarDecoder(Mat img){ string result; ImageScanner scanner; const void *raw = (&img)->data; // configure the reader scanner.set_config(ZBAR_QRCODE, ZBAR_CFG_ENABLE, 1); // wrap image data Image image(img.cols, img.rows, "Y800", raw, img.cols * img.rows); // scan the image for barcodes int n = scanner.scan(image); // extract results result = image.symbol_begin()->get_data(); image.set_data(NULL, 0); return result;}//对二值图像进行识别,如果失败则开运算进行二次识别string GetQRInBinImg(Mat binImg){ string result = ZbarDecoder(binImg); if(result.empty()) { Mat openImg; Mat element = getStructuringElement(MORPH_RECT, Size(3, 3)); morphologyEx(binImg, openImg, MORPH_OPEN, element); result = ZbarDecoder(openImg); } return result;}//main functionstring GetQR(Mat img){ Mat binImg; //在otsu二值结果的基础上,不断增加阈值,用于识别模糊图像 int thre = threshold(img, binImg, 0, 255, cv::THRESH_OTSU); string result; while(result.empty() && thre<255) { threshold(img, binImg, thre, 255, cv::THRESH_BINARY); result = GetQRInBinImg(binImg); thre += 20;//阈值步长设为20,步长越大,识别率越低,速度越快 } return result;}
阅读全文
1 0
- 二维码开源库zbar、zxing使用心得
- 二维码开源库zbar、zxing使用心得
- 二维码开源库zbar、zxing使用心得
- 二维码开源库zbar、zxing使用心得
- 二维码扫描:ZBar,ZXing的使用
- 二维码扫描:ZBar,ZXing的使用
- 二维码Zxing&Zbar
- zbar和zxing使用
- zxing 二维码扫描心得
- 关于ZBar和ZXing二维码和条形码
- Android开发之二维码ZXing vs ZBar
- ZXing和ZBar扫描二维码、扫描条形码
- zBAR二维码的使用
- Android QR Code 二维码快速开发——使用ZXing, ZBar
- python 使用zbar解码二维码
- 二维码扫描-zbar的使用
- iOS使用Zbar扫描二维码
- iphone 上面一维码,二维码 zxing,zbar 最终乱码解决问题
- QT数据库
- SpringCloud 笔记 (三)---- Eureka通信过程
- Android性能优化之App应用启动分析与优化
- LBP特征
- 快速冥
- 二维码开源库zbar、zxing使用心得
- java.util.concurrent.locks.AbstractQueuedSynchronizer队列同步器源码解析
- 算法 1.3.35 RandomQueue
- Python基础-class类
- vmware 12.X安装centos7 minimal图文教程
- Android设计模式之(20)----装饰器模式
- MYSQL-实现split函数
- 剑指Offer_面试题36_数组中的逆序对
- &指针+1浅析