Zbar解码器是一个开源的二维码(包括条形码)解码器,可以识别来至于视频流,图像文件、手持扫码器和视频设备(如摄像头)等二维码识别,支持EAN-13/UPC-A, UPC-E, EAN-8, Code 128, Code 39, QR Code(二维码)等常用编码方式的条形码/二维码。
话不多说,直接开始配置和使用步骤。
一、下载并安装Zbar
1、Zbar安装包的下载 下载链接 选择如下图所示的 window安装包
2、双击 zbar-0.10-setup.exe文件,进行安装
3、一定要勾选“Development Headers and Libraries”。
4、安装完成之后,在对应目录下生成了如下图所示的文件。其中我们需要用到的主要是 bin、lib和include三个文件夹。
二、VS2013配置Zbar的属性
主要是include、lib、附加依赖项和dll所在目录。具体可参考 我之前的博文
三、结合opencv测试Zbar的效果
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
#include "zbar.h"
using namespace std;
using namespace cv;
using namespace zbar;
int main()
{
ImageScanner scanner;
scanner.set_config(ZBAR_NONE, ZBAR_CFG_ENABLE, 1);
Mat image = imread("3.jpg");
if (!image.data)
{
cout << "请确认图片" << endl;
system("pause");
return 0;
}
Mat Gray;
cvtColor(image, Gray, CV_RGB2GRAY);
//Mat imageGray = Gray(Rect(Point(338, 473), Point(1148, 652)));
Mat imageGray = Gray.clone();
int width = imageGray.cols;
int height = imageGray.rows;
Image imageZbar(width, height, "Y800", imageGray.data, width * height);
int n=scanner.scan(imageZbar); //扫描条码
Image::SymbolIterator symbol = imageZbar.symbol_begin();
if (imageZbar.symbol_begin() == imageZbar.symbol_end())
{
cout << "查询条码失败,请检查图片!" << endl;
}
for (; symbol != imageZbar.symbol_end(); ++symbol)
{
cout << "类型:" << endl << symbol->get_type_name() << endl << endl;
cout << "条码:" << endl << symbol->get_data() << endl << endl;
}
imshow("Source Image", image);
waitKey();
imageZbar.set_data(NULL, 0);
return 0;
}
效果还不错,可以正确识别。
四、参考博文
1、http://blog.csdn.net/dcrmg/article/details/52108258
2、https://www.cnblogs.com/dengxiaojun/p/5278679.html
3、http://blog.csdn.net/kaychangeek/article/details/77483992