一.在window下的编译运行
1.首先要下载Microsoft Visual Studio 2010或者更高版本:对与该软件的相关配置参考《OPENCV 3》这本书;
2.下载和安装opencv3.0.0以及Zbar-0.10安装包
(2)Zbar-0.10安装:
找到刚才的下载路径后双击 ,开始安装Zbar-0.10,如下图:
点击next,进入下图后勾选“DevelopmentHeadersand Libraries”:
点击next后进入下图选择安装路径:
点击install,等待安装完成之后在对应目录下出现下列文件夹,代表安装成功了.

下载完成之后双击“opencv-2.4.13.exe”,弹出安装(解压)对话框:
选择安装路径时使用的还是“D:\ProgramFilesD”,点击“Extract”后开始解压;
值得注意的一点是不需要在安装目录里额外建“opencv”的文件夹,OpenCV安装包解压出来的根目录就是“opencv”。
点击开始菜单,右击计算机->属性->高级系统设置->高级->环境变量,

加入自己的OpenCV目录和Zbar目录,我的是“D:\ProgramFileD\opencv\buile\x86\vc12\bin”
系统变量配置完毕,点击确定就好啦。
然后:重新启动电脑。
注:变量值实际为bin文件夹的路径;D表示OpenCV安装于D盘;X64表示运行系统环境位64位系统,若安装于32位系统,应为X86;vc12表示编译环境为Microsoft Visual Studio 2013或者2015;变量添加完成后最好进行重启,这样才可以生效。
(5)VS2010工程项目属性配置:
首先打开VS2010;

在工程ZbarTest工程的视图目录的下拉菜单中打开属性管理器:
点击下一步,再点击下一步,勾选空项目,然后点击完成;
现在进行Zbar和Opencv目录的配置:
先在源文件下建立一个.cpp源文件 命名为ZbarTest.cpp;


接下来完成Zbar的VC++目录配置:
双击刚才添加的“Zbar_Debug_Setting.props“属性表,选择通用属性->VC++目录
在VC++目录->包含目录里添加1个目录: D:\ProgramFilesD\ZBar\include
选择VC++目录->库目录:
在库目录里添加1个目录:D:\ProgramFilesD\ZBar\lib
打开通用属性->链接器->输入:
在附加依赖项里添加1个依赖项:libzbar-0.lib
点击确定,完成对IDE环境的配置





接下来完成Opencv的VC++目录配置:
依然是找到属性管理器的窗口了,点击工程文件,
点击项目->属性->配置属性->VC++ 目录->包含目录,
添加D:\ ProgramFilesD\opencv\build\include
D:\ ProgramFilesD\opencv\build\include\opencv
D:\ ProgramFilesD\opencv\build\include\opencv2
如图:
在库目录添加:
D:\ ProgramFilesD\opencv\build\x86\vc12\lib
D:\ ProgramFilesD\opencv\build\x86\vc12\staticlib
在链接器--输入--附加依赖项添加:
opencv_ts300.lib


完成后一定要选择“确定”
(6)环境变量配置:
打开环境变量列表,这里跟在另一篇文章里Opencv+VS2010里的配置环境变量是一样的 ,如不知道环境变量如何配置,可以查看详细步骤。


添加完之后务必记得注销电脑后生效。
#include "zbar.h"
#include "cv.h"
#include "highgui.h"
#include <iostream>
using namespace std;
using namespace zbar; //添加zbar名称空间
using namespace cv;
int main(int argc,char*argv[])
{
ImageScanner scanner;
scanner.set_config(ZBAR_NONE, ZBAR_CFG_ENABLE, 1);
Mat image = imread("K1.jpg"); //不在mian函数同文件夹要写明路径
if(!image.data)
{
cout<<"请确认图片"<<endl;
system("pause");
return 0;
}
Mat imageGray;
cvtColor(image,imageGray,CV_RGB2GRAY);
int width = imageGray.cols;
int height = imageGray.rows;
uchar *raw = (uchar *)imageGray.data;
Image imageZbar(width, height, "Y800", raw, width * height);
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;
}





