本文主要參照了兩個人的部落格https://blog.csdn.net/dcrmg/article/details/52108258 用于安置zbar-0.10-32位版本,而實際電腦安裝的vs-2015是64位系統,運作程式會出錯,然後移植了64位的zbar。主要參考了這篇部落格文章https://blog.csdn.net/MengchiCMC/article/details/77871714。
1 Zbar安裝包下載下傳
點選下載下傳:http://zbar.sourceforge.net/download.html(官網下載下傳連結),點選ZBar 0.10 Windows installer下載下傳Windows版本,目前最新版本是zbar-0.10-setup.exe。
2.Zbar安裝
輕按兩下zbar-0.10-setup.exe,開始安裝Zbar,其實就是對安裝包的解壓縮,如下圖:

勾選“Development Headers and Libraries”:
選擇安裝路徑:
安裝完成之後在對應目錄下出現下列檔案夾,代表安裝成功了
3. VS2015工程項目屬性配置
3.1 添加屬性表
建立Win32控制台應用程式,工程名命名為ZbarTest,過程圖就省略~
在工程ZbarTest工程的視圖目錄的下拉菜單中打開屬性管理器:
在屬性管理器的Debug|Win32目錄上單擊選擇“添加新項目屬性表”,建立屬性表,并命名為“Zbar_Debug_Setting.props“,如下圖所示:
點選添加,完成對項目屬性表的添加。
3.2 VC++目錄配置
輕按兩下剛才添加的“Zbar_Debug_Setting.props“屬性表,選擇通用屬性->VC++目錄:
在VC++目錄->包含目錄裡添加1個目錄:D:\Program Files (x86)\ZBar\include
選擇VC++目錄->庫目錄:
在庫目錄裡添加1個目錄:D:\Program Files (x86)\ZBar\lib
3.3 輸入目錄配置
打開通用屬性->連結器->輸入:
在附加依賴項裡添加1個依賴項: libzbar-0.lib這個是32位版本的,可以一并添加64位版本的libzbar64-0.lib
點選确定,完成對IDE環境的配置。
4. 環境變量配置:
打開環境變量清單,這裡跟在另一篇文章裡Opencv+VS2015裡的配置環境變量是一樣的 ,如不知道環境變量如何配置,可以點選這裡檢視詳細步驟。
添加Zbar的動态庫所在目錄:D:\Program Files (x86)\ZBar\bin; 添加之後系統就不會找不到需要的dll檔案了。
添加完之後務必記得登出電腦後生效。
OK!完成這4個步驟的動作,整個Zbar和VS2012的配置工作就全部完成了。
5. 環境測試
最後通過一個例程,來測試一下配置是否OK,這個例子的實作是查找到輸入圖檔中的二維碼,并在控制台視窗和圖檔視窗中分别輸出二維碼的内容。
注意把二維碼圖檔放入程式所在路徑下,運作效果如下:
執行個體代碼如下
#include "stdafx.h"
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include "zbar.h"
#include <cv.h>
#include "highgui.h"
#include <iostream>
#include <time.h>
using namespace std;
using namespace zbar; //添加zbar名稱空間
using namespace cv;
int main()
{
clock_t start = clock(); // 記錄程式開始時間,用于計算掃描二維碼耗時
zbar::ImageScanner scanner;
scanner.set_config(zbar::ZBAR_NONE, zbar::ZBAR_CFG_ENABLE, 1);
Mat imgOrigin = imread("E:\\borcode.png"); // 二維碼圖檔相對路徑
Mat imgGray;
cvtColor(imgOrigin, imgGray, CV_BGR2GRAY); // 灰階化
int width = imgGray.cols;
int height = imgGray.rows;
Image image(width, height, "Y800", imgGray.data, width * height); // 圖檔格式轉換
scanner.scan(image);
Image::SymbolIterator symbol = image.symbol_begin();
if (image.symbol_begin() == image.symbol_end())
{
cout << "查詢條碼失敗,請檢查圖檔!" << endl;
}
for (; symbol != image.symbol_end(); ++symbol)
{
cout << "類型:" << endl << symbol->get_type_name() << endl << endl;
cout << "條碼:" << endl << symbol->get_data() << endl << endl;
}
image.set_data(nullptr, 0);
clock_t finish = clock(); // 記錄程式結束時間
double time_length = (double)(finish - start) / CLOCKS_PER_SEC; //根據兩個時刻的差,計算出掃描的時間
cout << "掃描耗時 " << time_length << " seconds." << endl;
return 0;
}
特别注意:在編譯的時候會出現找不到zbar.h庫檔案的情況,是因為大多數文檔都是按照32位系統配置 的,需要将剛剛在32位系統下添加的“Zbar_Debug_Setting.props“屬性表指派一份到x64的環境 下。
然後編譯生成可執行檔案。但是運作程式的時候會出錯
出現error LNK2019 : unresolved external symbol 這個類問題的一個可能原因就是庫包lib沒有包含到工程中。經過研究發現,我目前的VS工程配置為x64環境,而按照前文教程從官網上下載下傳的ZBar是32位的。經過一番嘗試,發現如下解決方法:
- zbar Windows32和64的庫在此下載下傳包含32位和64位的庫(也可以到GitHub上下載下傳免費的版本);
- 解壓下載下傳完成的庫,并将 ZBarWin64-master\lib 檔案夾下 libzbar64-0.lib 檔案複制到ZBar安裝路徑下的 lib 檔案夾;
- 将 ZBarWin64-master\lib 檔案夾下 libzbar64-0.dll 檔案複制到ZBar安裝路徑下的 bin 檔案夾;
- 将ZBarWin64-master\zbar\libiconv\dll_x64檔案夾下 libiconv.dll 複制到ZBar安裝路徑下的bin 檔案夾;
-
在VS項目屬性表中,打開 通用屬性->連結器->輸入 再添加一條:libzbar64-0.lib;
(注:以上步驟均在文章開頭介紹的教程配置完成的基礎上做出的進一步補充);
按照上述5步進行進一步配置後,VS2015即可在64位環境下正确運作示例程式。