• 配置zbar识别二维码()


    二维码解码器Zbar+VS2012开发环境配置
    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( "code.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;    
    }        


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





    换用二维码图片:





    如果编译过程中提示错误   “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_WARNING


    我也配置成功了!

    //学习OpenCV3 中级
    //L5 课程代码 反向投影综合例子
    # include  "stdafx.h"
    # include  <opencv2 /core /utility.hpp >
    # include  "opencv2/video/tracking.hpp"
    # include  "opencv2/imgproc.hpp"
    # include  "opencv2/videoio.hpp"
    # include  "opencv2/highgui.hpp"
    # include  "zbar.h"   
    # include  <iostream >
    # include  <ctype.h >
    using  namespace cv;
    using  namespace std;
    using  namespace zbar;
    void main()
    {
        ImageScanner scanner;        
        scanner.set_config(ZBAR_NONE, ZBAR_CFG_ENABLE,  1);      
        Mat src  = imread( "E:/sandbox/1.png",IMREAD_COLOR);
        Mat imageGray;        
        cvtColor(src,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",src);          
        waitKey();      
        imageZbar.set_data(NULL, 0);   
    }




    附件列表

    • 相关阅读:
      Node(十一)mongoose配合Node实现注册登录(注册上传头像,登录成功后显示用户信息)
      JS案例:购物车操作(简单实现)
      JS案例:Jq中的fadeOut和fadeIn实现简单轮播(没完善,简单实现)
      JS案例:小球拖动,记录轨迹,并原路返回
      html框架frame iframe
      单元测试
      软件测试计划、依据、规范
      软件测试
      html表单
      html块 布局
    • 原文地址:https://www.cnblogs.com/jsxyhelu/p/16947996.html
    Copyright © 2020-2023  润新知