1. 程式人生 > >二維碼解碼器Zbar+VS2012開發環境配置

二維碼解碼器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,這個例子的實現是查詢到輸入圖片中的二維碼,並在控制檯視窗和圖片視窗中分別輸出二維碼的內容。

[cpp] view plain copy print?
  1. #include "zbar.h"      
  2. #include "cv.h"      
  3. #include "highgui.h"      
  4. #include <iostream>      
  5. usingnamespace std;        
  6. usingnamespace zbar;  //新增zbar名稱空間    
  7. usingnamespace cv;        
  8. int main(int argc,char*argv[])      
  9. {        
  10.     ImageScanner scanner;        
  11.     scanner.set_config(ZBAR_NONE, ZBAR_CFG_ENABLE, 1);      
  12.     Mat image = imread("code.jpg");    
  13.       if(!image.data)  
  14.         {  
  15.            cout<<"請確認圖片"<<endl;  
  16.            system("pause");  
  17.            return 0;  
  18.         }  
  19.     Mat imageGray;        
  20.     cvtColor(image,imageGray,CV_RGB2GRAY);        
  21.     int width = imageGray.cols;        
  22.     int height = imageGray.rows;        
  23.     uchar *raw = (uchar *)imageGray.data;           
  24.     Image imageZbar(width, height, "Y800", raw, width * height);          
  25.     scanner.scan(imageZbar); //掃描條碼    
  26.     Image::SymbolIterator symbol = imageZbar.symbol_begin();    
  27.     if(imageZbar.symbol_begin()==imageZbar.symbol_end())    
  28.     {    
  29.         cout<<"查詢條碼失敗,請檢查圖片!"<<endl;    
  30.     }    
  31.     for(;symbol != imageZbar.symbol_end();++symbol)      
  32.     {        
  33.         cout<<"型別:"<<endl<<symbol->get_type_name()<<endl<<endl;      
  34.         cout<<"條碼:"<<endl<<symbol->get_data()<<endl<<endl;         
  35.     }        
  36.     imshow("Source Image",image);          
  37.     waitKey();      
  38.     imageZbar.set_data(NULL,0);    
  39.     return 0;    
  40. }        

注意把二維碼圖片放入程式所在路徑下,執行效果如下:



換用二維碼圖片:



如果編譯過程中提示錯誤   “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