zoukankan      html  css  js  c++  java
  • 二维码解码器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:ProgramFilesDBarinclude

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

    在库目录里添加1个目录: D:ProgramFilesDBarlib

    3.3 输入目录配置

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

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

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

    4. 环境变量配置:

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

    添加Zbar的动态库所在目录:D:ProgramFilesDBarin;  添加之后系统就不会找不到需要的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

  • 相关阅读:
    leetcode 13. Roman to Integer
    python 判断是否为有效域名
    leetcode 169. Majority Element
    leetcode 733. Flood Fill
    最大信息系数——检测变量之间非线性相关性
    leetcode 453. Minimum Moves to Equal Array Elements
    leetcode 492. Construct the Rectangle
    leetcode 598. Range Addition II
    leetcode 349. Intersection of Two Arrays
    leetcode 171. Excel Sheet Column Number
  • 原文地址:https://www.cnblogs.com/HappyEDay/p/6963188.html
Copyright © 2011-2022 走看看