您的位置:首页 > 其它

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

2015-10-13 10:40 393 查看

ZBar在Windows上的使用

下载ZBar v0.10 http://zbar.sourceforge.net/

外网无法进入的话,在此下载http://download.csdn.net/detail/sunflower_boy/9175433

1.1 默认安装

注意勾选上Development Headers and Libraries



安装完成后可在ZBar安装路径下找到examples文件夹,用vs2008及以上编译器可以打开工程文件(由于权限问题,部分机器可能要将examples文件夹拷贝至其他目录下运行

在工程属性中可以看见例程还需要ImageMagick组件来读取文件,将文件转换成需要的格式



下载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++



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-)。



打开scan_image.cpp

屏蔽掉11行的

if(argc < 2) return(1);


将27行的

Magick::Image magick(argv[1]);


替换为

Magick::Image magick("barcode.png");


程序最后置断点,运行,OK!

分析

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

附录1:

scan_image.cpp

#include <iostream>
#include <Magick++.h>
#include <zbar.h>
#define STR(s) #s

using 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息