本文主要参照了两个人的博客https://blog.csdn.net/dcrmg/article/details/52108258 用于安置zbar-0.10-32位版本,而实际电脑安装的vs-2015是64位系统,运行程序会出错,然后移植了64位的zbar。主要参考了这篇博客文章https://blog.csdn.net/MengchiCMC/article/details/77871714。
1 Zbar安装包下载
点击下载:http://zbar.sourceforge.net/download.html(官网下载链接),点击ZBar 0.10 Windows installer下载Windows版本,目前最新版本是zbar-0.10-setup.exe。
2.Zbar安装
双击zbar-0.10-setup.exe,开始安装Zbar,其实就是对安装包的解压缩,如下图:

勾选“Development Headers and Libraries”:
选择安装路径:
安装完成之后在对应目录下出现下列文件夹,代表安装成功了
3. VS2015工程项目属性配置
3.1 添加属性表
新建Win32控制台应用程序,工程名命名为ZbarTest,过程图就省略~
在工程ZbarTest工程的视图目录的下拉菜单中打开属性管理器:
在属性管理器的Debug|Win32目录上单击选择“添加新项目属性表”,新建属性表,并命名为“Zbar_Debug_Setting.props“,如下图所示:
点击添加,完成对项目属性表的添加。
3.2 VC++目录配置
双击刚才添加的“Zbar_Debug_Setting.props“属性表,选择通用属性->VC++目录:
在VC++目录->包含目录里添加1个目录:D:\Program Files (x86)\ZBar\include
选择VC++目录->库目录:
在库目录里添加1个目录:D:\Program Files (x86)\ZBar\lib
3.3 输入目录配置
打开通用属性->链接器->输入:
在附加依赖项里添加1个依赖项: libzbar-0.lib这个是32位版本的,可以一并添加64位版本的libzbar64-0.lib
点击确定,完成对IDE环境的配置。
4. 环境变量配置:
打开环境变量列表,这里跟在另一篇文章里Opencv+VS2015里的配置环境变量是一样的 ,如不知道环境变量如何配置,可以点击这里查看详细步骤。
添加Zbar的动态库所在目录:D:\Program Files (x86)\ZBar\bin; 添加之后系统就不会找不到需要的dll文件了。
添加完之后务必记得注销电脑后生效。
OK!完成这4个步骤的动作,整个Zbar和VS2012的配置工作就全部完成了。
5. 环境测试
最后通过一个例程,来测试一下配置是否OK,这个例子的实现是查找到输入图片中的二维码,并在控制台窗口和图片窗口中分别输出二维码的内容。
注意把二维码图片放入程序所在路径下,运行效果如下:
实例代码如下
#include "stdafx.h"
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include "zbar.h"
#include <cv.h>
#include "highgui.h"
#include <iostream>
#include <time.h>
using namespace std;
using namespace zbar; //添加zbar名称空间
using namespace cv;
int main()
{
clock_t start = clock(); // 记录程序开始时间,用于计算扫描二维码耗时
zbar::ImageScanner scanner;
scanner.set_config(zbar::ZBAR_NONE, zbar::ZBAR_CFG_ENABLE, 1);
Mat imgOrigin = imread("E:\\borcode.png"); // 二维码图片相对路径
Mat imgGray;
cvtColor(imgOrigin, imgGray, CV_BGR2GRAY); // 灰度化
int width = imgGray.cols;
int height = imgGray.rows;
Image image(width, height, "Y800", imgGray.data, width * height); // 图片格式转换
scanner.scan(image);
Image::SymbolIterator symbol = image.symbol_begin();
if (image.symbol_begin() == image.symbol_end())
{
cout << "查询条码失败,请检查图片!" << endl;
}
for (; symbol != image.symbol_end(); ++symbol)
{
cout << "类型:" << endl << symbol->get_type_name() << endl << endl;
cout << "条码:" << endl << symbol->get_data() << endl << endl;
}
image.set_data(nullptr, 0);
clock_t finish = clock(); // 记录程序结束时间
double time_length = (double)(finish - start) / CLOCKS_PER_SEC; //根据两个时刻的差,计算出扫描的时间
cout << "扫描耗时 " << time_length << " seconds." << endl;
return 0;
}
特别注意:在编译的时候会出现找不到zbar.h库文件的情况,是因为大多数文档都是按照32位系统配置 的,需要将刚刚在32位系统下添加的“Zbar_Debug_Setting.props“属性表赋值一份到x64的环境 下。
然后编译生成可执行文件。但是运行程序的时候会出错
出现error LNK2019 : unresolved external symbol 这个类问题的一个可能原因就是库包lib没有包含到工程中。经过研究发现,我当前的VS工程配置为x64环境,而按照前文教程从官网上下载的ZBar是32位的。经过一番尝试,发现如下解决方法:
- zbar Windows32和64的库在此下载包含32位和64位的库(也可以到GitHub上下载免费的版本);
- 解压下载完成的库,并将 ZBarWin64-master\lib 文件夹下 libzbar64-0.lib 文件复制到ZBar安装路径下的 lib 文件夹;
- 将 ZBarWin64-master\lib 文件夹下 libzbar64-0.dll 文件复制到ZBar安装路径下的 bin 文件夹;
- 将ZBarWin64-master\zbar\libiconv\dll_x64文件夹下 libiconv.dll 复制到ZBar安装路径下的bin 文件夹;
-
在VS项目属性表中,打开 通用属性->链接器->输入 再添加一条:libzbar64-0.lib;
(注:以上步骤均在文章开头介绍的教程配置完成的基础上做出的进一步补充);
按照上述5步进行进一步配置后,VS2015即可在64位环境下正确运行示例程序。