zbar识别条形码

最近要从答题卡区域中识别出考生准考证号,也是小小踩了个坑,一度怀疑是不是zbar的问题,还去尝试TBar、quirc。不过还好下班前解决了,主要的代码也不长,主要也是参考已有的,记录一下,避免日后踩坑。
//首先将图cur_img转换为灰度图
//cv::cvtColor(cur_img, cur_img, cv::COLOR_BGR2GRAY);
//zbar::ImageScanner 创建一个图像扫描的对象
zbar::ImageScanner scanner;
//调用set_config方法进行条形码识别 现在一般都CODE128 
scanner.set_config(zbar::ZBAR_NONE, zbar::ZBAR_CFG_ENABLE, 1);
 
 
//准备图像数据 首先获取cur_img数据的指针
//创建一个zbar::Image
uchar* raw = (uchar*)cur_img.data;
if (!raw)
return 0;
zbar::Image imageZbar(cur_img.cols, cur_img.rows, "Y800", cur_img.data, cur_img.step);
//扫描条形码
scanner.scan(imageZbar);
//对比识别结果
zbar::Image::SymbolIterator symbol = imageZbar.symbol_begin();
if (symbol == imageZbar.symbol_end())
{
    std::cout << "查询条码失败,请检查图片!" << std::endl;
return -1;
}
else {
//提取条形码信息
for (; symbol != imageZbar.symbol_end(); ++symbol) {
        std::string bar_type = symbol->get_type_name();
//将条形码数据存储在barcode中
        ans = symbol->get_data().c_str();
break;
    }
}
return 0;

结果如下:

 

posted @ 2025-06-24 14:37  Wind_Swing_Dunn  阅读(88)  评论(0)    收藏  举报