第一步:下载Zbar源码:http://zbar.sourceforge.net/download.html
第二步:交叉编译ZBar
(1)解压缩源码包:tar -jxvf zbar-0.10.tar.bz2
进入ZBar源码目录内,创建一个output文件夹以用来放置编译出来的文件:
cd zbar-0.10
mkdir output
结果如图所示:
(2)配置编译ZBar库:
./configure --prefix=$PWD/output/ --without-gtk --without-qt --without-imagemagick --without-python --disable-video
(3)make & make install
就会发现,output里面有了编译的输出文件:
以上就是交叉编译ZBar的全部,下面是一个例子:
(4)配置pkg-config:
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/home/chris/Desktop/zbar- 0.10/output/lib/pkgconfig
然后: pkg-config --libs --cflags zbar 可以看到:
表示配置成功。
第三步:编写一个小例子编译运行:
例子是利用opencv与Zbar解码一张二维码图片,并且在终端显示其数据与类型:
#include <opencv2/opencv.hpp>
#include <iostream>
#include <stdio.h>
#include "zbar.h"
int main(int argc, char** argv){
if(argc < 2){
std::cout << "Usage: ./test_zbar barcode.png" << std::endl;
return -1;
}
cv::Mat src = cv::imread(argv[1], 1);
cv::Mat gray;
if (src.channels() == 1) gray = src;
else cv::cvtColor(src, gray, CV_RGB2GRAY);
int width = gray.cols;
int height = gray.rows;
// create a reader
zbar::ImageScanner scanner;
// configure the reader
scanner.set_config(zbar::ZBAR_NONE, zbar::ZBAR_CFG_ENABLE, 1);
unsigned char *pdata = (unsigned char *)gray.data;
zbar::Image imageZbar(width, height, "Y800", pdata, width * height);
int n = scanner.scan(imageZbar);
if (n > 0){
// extract results
for (zbar::Image::SymbolIterator symbol = imageZbar.symbol_begin();
symbol != imageZbar.symbol_end();
++symbol) {
// do something useful with results
std::string decodedFmt = symbol->get_type_name();
std::string symbolData = symbol->get_data();
std::cout << symbolData << std::endl;
}
}else{
char error_str[64];
sprintf(error_str, "Not got a barcode!");
std::cout << "Not got a barcode!" << std::endl;
}
cv::imwrite("result.png", src);
// clean up
imageZbar.set_data(NULL, 0);
}