Linux下二维码识别库Zbar的安装与使用
1. 安装Zbar
sudo apt-get install libzbar-dev
2. 识别流程
- 读取图像并转换为Zbar内建图像类型
- 创建Zbar扫描器
- 设置扫描参数
- 扫描图像并获取结果
#include <zbar.h> // 仅能包含该头文件,其他头文件宏定义中写了不可用于使用 #include <opencv2/opencv.hpp> using namespace cv; int main() { Mat img = imread("test.jpg"); // 读取图像 /*转换为Zbar内置图像类型*/ auto row = Gray.rows; auto col = Gray.cols; uchar *data = (uchar *)Gray.data; /*创建Zbar图像, Image类型对象*/ Image code(col, row, "Y800", data, row * col); /*创建Zbar扫描器*/ ImageScanner scanner; /*设置Zbar配置,这里设置的是条码二维码均可识别的模式,至于可选参数可以查看对应的枚举类型定义*/ scanner.set_config(ZBAR_NONE, ZBAR_CFG_ENABLE, 1); /*扫描图像并获取结果*/ scanner.scan(code); // 返回值为: >0代表有条码/二维码被识别,0代表没有识别到,<0代表出错 /*输出识别结果,每一个二维码有三种属性,类型,内容以及在图像中的位置*/ struct ans // 暂存结果 { string type; string content; vector<Point2f> points; } vector<ans> res; /*一张图像中可能有多个码因此使用Zbar提供的迭代器类型进行访问*/ Image::SymbolIterator Symbol = code.symbol_begin(); for(; Symbol != code.symbol_end(); ++Symbol) { ans tmp; tmp.type = Symbol->get_type(); tmp.content = Symbol->get_data(); for (int i = 0; i < Symbol->get_location_size(); i++) tmp.points.push_back(Point2f(Symbol->get_location_x(i), Symbol->get_location_y(i))); res.push_back(tmp); } /*展示结果*/ for(int i = 0; i < res.size(); i++) { cout << "type: " << res[i].type << endl; cout << "content: " << res[i].content << endl; for(int j=0;j<res[i]..size();j++) line(img,res[i].points[j],res[i].points[(j+1)%res[i].points.size()],Scalar(255,0, 0),4); } }
3. cmake编写
如果使用findpackage
去寻找zbar,是找不到的。
使用findpackage的前提是包在安装时提供了一个名为
findXXX.cmake
或者xxxconfig.cmake
的文件且加到环境变量中。
但zbar等以下轻量库并没有提供这个文件,取而代之的是一个后缀为.pc
的文件。
pkgconfig
是linux下的一个包管理器,与cmake类似,它通过.pc
后缀文件来去管理包,获取包的相关信息。
因此我们可以通过cmake调用pkgconfig
来找到zbar的相关信息。
cmake_minimum_required(VERSION 3.5.1) project(ZbarTest) find_package(OpenCV REQUIRED) find_package(PkgConfig REQUIRED) # 找到pkgconfig pkg_search_module(ZBAR REQUIRED zbar) # 通过pkgconfig查找zbar,然后就可以使用ZBAR_INCLUDE_DIRS和ZBAR_LIBRARIES变量了 add_executable(main QrCode.cpp) target_include_directories(main PRIVATE ${OpenCV_INCLUDE_DIRS} ${ZBAR_INCLUDE_DIRS}) target_link_libraries(main PRIVATE ${OpenCV_LIBS} ${ZBAR_LIBRARIES} libMVSDK.so MvCamera)
本文作者:凪风的博客
本文链接:https://www.cnblogs.com/CrescentWind/p/18567635
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步