#include <zbar.h>
zbar::ImageScanner scaner;
scaner.set_config(zbar::ZBAR_NONE,zbar::ZBAR_CFG_ENABLE,1);
int width = img_gray.cols;
int height = img_gray.rows;
//在ZBar中进行扫描的时候,需要将OpenCV中的Mat类型转换成(uchar×)类型,raw中存放的是图像的地址
uchar *raw = (uchar*)img_gray.data;
//对应的图像转成Zbar中的zbar::Image
zbar::Image imageZbar(width,height,"Y800",raw,width*height);
scaner.scan(imageZbar);
if(imageZbar.symbol_begin() == imageZbar.symbol_end() )
{
std::cout << "Scan is failed!" << std::endl;
}
for(zbar::Image::SymbolIterator symbol = imageZbar.symbol_begin(); symbol!= imageZbar.symbol_end(); ++symbol)
{
std::string text = symbol->get_data();
std::cout << "Type: " << std::endl << symbol->get_type_name() << std::endl << std::endl;
std::cout << "Barcode: " << std::endl << text << std::endl << std::endl;
cv::putText(img,text,cv::Point(50,50),cv::FONT_HERSHEY_COMPLEX,1,cv::Scalar(0,0,255));
cv::imshow("11.Result",img);
}
Zbar支持的条形码格式有:
EAN-13
UPC-A
UPC-E
EAN-8
Code128
Code39
Interleaved 2 / 5