1. 程式人生 > >配置zbar識別二維碼(轉載)

配置zbar識別二維碼(轉載)

replace 視圖 詳細步驟 util .cn 新項目 r+ headers 裝包

原文地址:http://blog.csdn.net/dcrmg/article/details/52108258 二維碼解碼器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,這個例子的實現是查找到輸入圖片中的二維碼,並在控制臺窗口和圖片窗口中分別輸出二維碼的內容。


#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("code.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;
}


註意把二維碼圖片放入程序所在路徑下,運行效果如下:

技術分享


技術分享


換用二維碼圖片:

技術分享

技術分享



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


我也配置成功了!

//學習OpenCV3 中級
//L5 課程代碼 反向投影綜合例子
#include "stdafx.h"
#include <opencv2/core/utility.hpp>
#include "opencv2/video/tracking.hpp"
#include "opencv2/imgproc.hpp"
#include "opencv2/videoio.hpp"
#include "opencv2/highgui.hpp"
#include "zbar.h"
#include <iostream>
#include <ctype.h>
using namespace cv;
using namespace std;
using namespace zbar;
void main()
{
ImageScanner scanner;
scanner.set_config(ZBAR_NONE, ZBAR_CFG_ENABLE, 1);
Mat src = imread("E:/sandbox/1.png",IMREAD_COLOR);
Mat imageGray;
cvtColor(src,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",src);
waitKey();
imageZbar.set_data(NULL,0);
}

技術分享

來自為知筆記(Wiz)

附件列表

    配置zbar識別二維碼(轉載)