- 下載ZBar v0.10 http://zbar./
外網無法進入的話,,在此下載http://download.csdn.net/detail/sunflower_boy/9175433 1.1 默認安裝 注意勾選上Development Headers and Libraries 安裝完成后可在ZBar安裝路徑下找到examples文件夾,,用vs2008及以上編譯器可以打開工程文件(由于權限問題,,部分機器可能要將examples文件夾拷貝至其他目錄下運行) 在工程屬性中可以看見例程還需要ImageMagick組件來讀取文件,將文件轉換成需要的格式
- 下載ImageMagick
http://www./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./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);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
想要進一步了解Magick的可參考 http://www./Magick++/tutorial/Magick++_tutorial.pdf
|