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;
结果如下:


浙公网安备 33010602011771号