Zbar條碼解碼器是一個開源的二維碼(包括條形碼)解碼器,能夠識別來至於視頻流,圖像文件、手持掃碼器和視頻設備(如攝像頭)等二維碼識別,支持EAN-13/UPC-A, UPC-E, EAN-8, Code 128, Code 39, QR Code(二維碼)等經常使用編碼方式的條形碼/二維碼。html
下邊這個簡單粗暴的圖標就是Zbar:ios
Zbar的SDK支持包括C、C++、Python在內的多種語言,也提供了iOS和Androdi的SDK可供使用,用起來也很是方便,只須要在編譯環境裏添加相應的路徑就好了,再加上圖像處理包,如ImageMagick++或Opencv的輔助讀圖,就能夠編寫準確高效的二維碼識別程序了,下邊就一步一步的介紹如何在vs2012中配置Zbar。c++
點擊下載:Zbar官網下載連接,提供了Linux、Windows等版本的下載,目前最新版本是zbar-0.10。ide
雙擊zbar-0.10-setup.exe,開始安裝Zbar,其實就是對安裝包的解壓縮,以下圖:測試
勾選「Development Headers and Libraries」:ui
選擇安裝路徑:編碼
安裝完成以後在對應目錄下出現下列文件夾,表明安裝成功了:spa
新建Win32控制檯應用程序,工程名命名爲ZbarTest,過程圖就省略~.net
在工程ZbarTest工程的視圖目錄的下拉菜單中打開屬性管理器:code
在屬性管理器的Debug|Win32目錄上單擊選擇「添加新項目屬性表」,新建屬性表,並命名爲「Zbar_Debug_Setting.props「,以下圖所示:
點擊添加,完成對項目屬性表的添加。
雙擊剛纔添加的「Zbar_Debug_Setting.props「屬性表,選擇通用屬性->VC++目錄:
在VC++目錄->包含目錄裏添加1個目錄: D:\ProgramFilesD\ZBar\include
選擇VC++目錄->庫目錄:
在庫目錄裏添加1個目錄: D:\ProgramFilesD\ZBar\lib
打開通用屬性->連接器->輸入:
在附加依賴項裏添加1個依賴項: libzbar-0.lib
點擊肯定,完成對IDE環境的配置。
打開環境變量列表,這裏跟在另外一篇文章裏Opencv+VS2010裏的配置環境變量是同樣的 ,如不知道環境變量如何配置,能夠查看詳細步驟。
添加Zbar的動態庫所在目錄:D:\ProgramFilesD\ZBar\bin; 添加以後系統就不會找不到須要的dll文件了。
添加完以後務必記得註銷電腦後生效。
OK!完成這4個步驟的動做,整個Zbar和VS2012的配置工做就所有完成了。
最後經過一個例程,來測試一下配置是否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