ZBar在Windows上的使用(1)-ImageMagick

来源:互联网 发布:java框架源码 编辑:程序博客网 时间:2024/05/16 16:18

ZBar在Windows上的使用

  1. 下载ZBar v0.10 http://zbar.sourceforge.net/
    外网无法进入的话,在此下载http://download.csdn.net/detail/sunflower_boy/9175433
    1.1 默认安装
    注意勾选上Development Headers and Libraries
    ZBar Installation Note 1
    安装完成后可在ZBar安装路径下找到examples文件夹,用vs2008及以上编译器可以打开工程文件(由于权限问题,部分机器可能要将examples文件夹拷贝至其他目录下运行
    在工程属性中可以看见例程还需要ImageMagick组件来读取文件,将文件转换成需要的格式
    这里写图片描述
  2. 下载ImageMagick
    http://www.imagemagick.org/download/binaries/ImageMagick-6.9.2-4-Q8-x86-dll.exe
    注意:我的版本是6.9.1-7-Q8-x86。和上面下载链接上的不一样,如果使用上面的程序安装,下面说明中的路径都要改成对应的版本路径。
    2.1 默认安装
    注意勾选Install development headers and libraries for C and C++
    Magick Install Note 1
    2.2 修改工程属性以匹配自己下载安装的版本
    project->property->C/C++->General->Additional Include Directories
    C:\Program Files (x86)\ImageMagick-6.9.1-Q8\include
    这里写图片描述
    2.3 project-property-C/C++-General-Additional Include Directories
    C:\Program Files (x86)\ImageMagick-6.9.1-Q8\lib\CORE_RL_Magick++_.lib
    这里写图片描述
    2.4 如果出现error C2220: 警告被视为错误:打开属性project-property-C/C++-General->Treat Warnings As Errors改为No(/WX-)。
    这里写图片描述
  3. 打开scan_image.cpp
    屏蔽掉11行的
    if(argc < 2) return(1);
    将27行的
    Magick::Image magick(argv[1]);
    替换为
    Magick::Image magick("barcode.png");
    程序最后置断点,运行,OK!

  4. 分析
    从例程中可以看出Magick只是用来打开图片,转换格式,转换成灰度,二维矩阵的作用。用OpenCV应该也可以。

  5. 附录1:
    scan_image.cpp

#include <iostream>#include <Magick++.h>#include <zbar.h>#define STR(s) #susing namespace std;using namespace zbar;int main (int argc, char **argv){    //if(argc < 2) return(1);#ifdef MAGICK_HOME    // http://www.imagemagick.org/Magick++/    //    under Windows it is necessary to initialize the ImageMagick    //    library prior to using the Magick++ library    Magick::InitializeMagick(MAGICK_HOME);#endif    // create a reader    ImageScanner scanner;    // configure the reader    scanner.set_config(ZBAR_NONE, ZBAR_CFG_ENABLE, 1);    // obtain image data    Magick::Image magick("barcode.png");  // read an image file    int width = magick.columns();   // extract dimensions    int height = magick.rows();    Magick::Blob blob;              // extract the raw data    magick.modifyImage();    magick.write(&blob, "GRAY", 8);    const void *raw = blob.data();    // wrap image data    Image image(width, height, "Y800", raw, width * height);    // scan the image for barcodes    int n = scanner.scan(image);    // extract results    for(Image::SymbolIterator symbol = image.symbol_begin();        symbol != image.symbol_end();        ++symbol) {        // do something useful with results        cout << "decoded " << symbol->get_type_name()             << " symbol \"" << symbol->get_data() << '"' << endl;    }    // clean up    image.set_data(NULL, 0);    return(0);}

想要进一步了解Magick的可参考
http://www.imagemagick.org/Magick++/tutorial/Magick++_tutorial.pdf

0 0