版本
- ubuntu16.04
- zbar0.1.0
编译安装
export CFLAGS=""
./configure --without-gtk --without-qt --without-imagemagick --without-python
make -j8
sudo make install
cmake添加信息
set(ZBAR_LIBS /usr/local/lib)
set(ZBAR_HEADER /usr/local/include/zbar/ /usr/local/include/)
部分使用说明
参考 api.
zbar::ImageScanner scanner;
// configure the reader
//scanner.set_config(zbar::ZBAR_NONE, zbar::ZBAR_CFG_ENABLE, 1);
scanner->set_config(zbar::ZBAR_NONE, zbar::ZBAR_CFG_ENABLE, 0);//disable all first
scanner->set_config(zbar::ZBAR_QRCODE, zbar::ZBAR_CFG_ENABLE, 1);//open qr only
cv::Mat imageGray;
cv::cvtColor(frame->rgb,imageGray,CV_RGB2GRAY);
if(!imageGray.data)
{
std::cout << "read picture error!\n" << std::endl;
return false;
}
int width = imageGray.cols;
int height = imageGray.rows;
auto *raw = (uchar *)imageGray.data;
zbar::Image imageZbar(width, height, "Y800", raw, width * height);
// scan the image for barcodes
scanner.scan(imageZbar);
zbar::Image::SymbolIterator symbol = imageZbar.symbol_begin();
for(;symbol != imageZbar.symbol_end();++symbol)
{
//code type
std::cout<<"type:"<<std::endl<<symbol->get_type_name()<<std::endl<<std::endl;
//decode string
std::cout<<"data:"<<std::endl<<symbol->get_data()<<std::endl<<std::endl;
for(int i = 0;i< symbol->get_location_size();i++){//qr 4 corner point
std::cout<<"location x["<<i<<"] = "<<std::endl<<symbol->get_location_x(i)<<std::endl<<std::endl;
std::cout<<"location y["<<i<<"] = "<<std::endl<<symbol->get_location_y(i)<<std::endl<<std::endl;
}
/*
* ---------------------------------------x
* | p1 - p4
* | | |
* | p2 - p3
* y
* */
}