首页 > 代码库 > 二维码解码器Zbar+VS2010开发环境配置(使用opencv库)

二维码解码器Zbar+VS2010开发环境配置(使用opencv库)

Zbar条码解码器是一个开源的二维码(包括条形码)解码器,可以识别来至于视频流,图像文件、手持扫码器和视频设备(如摄像头)等二维码识别,支持EAN-13/UPC-A, UPC-E, EAN-8, Code 128, Code 39, QR Code(二维码)等常用编码方式的条形码/二维码。

 

下边这个简单粗暴的图标就是Zbar:

技术分享

 

Zbar的SDK支持包括C、C++、Python在内的多种语言,也提供了iOS和Androdi的SDK可供使用,用起来也非常方便,只需要在编译环境里添加相应的路径就行了,再加上图像处理包,如ImageMagick++或Opencv的辅助读图,就可以编写准确高效的二维码识别程序了,下边就一步一步的介绍如何在vs2012中配置Zbar。

 

1. Zbar安装包下载

点击下载:Zbar官网下载链接,提供了Linux、Windows等版本的下载,目前最新版本是zbar-0.10。

 

2. Zbar安装

双击zbar-0.10-setup.exe,开始安装Zbar,其实就是对安装包的解压缩,如下图:

技术分享

 

勾选“Development Headers and Libraries”:

技术分享

 

选择安装路径:

技术分享

 

安装完成之后在对应目录下出现下列文件夹,代表安装成功了:

技术分享

 

3. VS2012工程项目属性配置

3.1 添加属性表

新建Win32控制台应用程序,工程名命名为ZbarTest,过程图就省略~

在工程ZbarTest工程的视图目录的下拉菜单中打开属性管理器:

技术分享

 

 

在属性管理器的Debug|Win32目录上单击选择“添加新项目属性表”,新建属性表,并命名为“Zbar_Debug_Setting.props“,如下图所示:

技术分享

 

技术分享

点击添加,完成对项目属性表的添加。

 

3.2 VC++目录配置

双击刚才添加的“Zbar_Debug_Setting.props“属性表,选择通用属性->VC++目录:

技术分享

 

在VC++目录->包含目录里添加1个目录: D:\ProgramFilesD\ZBar\include

技术分享

 

技术分享

 

选择VC++目录->库目录:

技术分享

 

在库目录里添加1个目录: D:\ProgramFilesD\ZBar\lib

技术分享

 

3.3 输入目录配置

打开通用属性->链接器->输入:

技术分享

 

在附加依赖项里添加1个依赖项: libzbar-0.lib

技术分享

 

点击确定,完成对IDE环境的配置。

 

4. 环境变量配置:

 

打开环境变量列表,这里跟在另一篇文章里Opencv+VS2010里的配置环境变量是一样的 ,如不知道环境变量如何配置,可以查看详细步骤。

 

技术分享

 

添加Zbar的动态库所在目录:D:\ProgramFilesD\ZBar\bin;  添加之后系统就不会找不到需要的dll文件了。

技术分享

添加完之后务必记得注销电脑后生效。

OK!完成这4个步骤的动作,整个Zbar和VS2012的配置工作就全部完成了。

 

5. 环境测试

最后通过一个例程,来测试一下配置是否OK,这个例子的实现是查找到输入图片中的二维码,并在控制台窗口和图片窗口中分别输出二维码的内容。

注意图片的位置和名称

#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");    
    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;    
}

 

注意把二维码图片放入程序所在路径下,运行效果如下:

技术分享

 

技术分享

 

换用二维码图片:

技术分享

技术分享

 

 如果编译提示找不到

"cv.h"
"highgui.h"

两个头文件,请配置opencv的引用,具体方法可参看前面博文。

如果编译过程中提示错误   “error C4996: ‘fopen‘: This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.” 

可以尝试以下解决方案:

项目 =》属性 =》c/c++  =》预处理器=》点击预处理器定义,编辑,加入_CRT_SECURE_NO_WARNINGS

二维码解码器Zbar+VS2010开发环境配置(使用opencv库)