OpenCV导入ZXing进行DataMatrix码识别
本文介绍了在C++项目中集成ZXing库实现DataMatrix二维码识别的过程。主要步骤包括:1)下载ZXing 2.3.0源码和CMake 3.22.1;2)使用CMake生成VS2022项目(建议用C++20避免兼容问题);3)编译生成.lib文件;4)将源码中的核心文件整合到项目中并配置头文件路径;5)在链接器中添加库文件路径和依赖项。文中提供了关键的代码示例和配置方法,最终实现了通过Op
因为工作需要所以需要在原有的C++项目中导入DataMatrix二维码识别,DeepSeek说可以使用ZXing来识别,因为以前没搞过,所以记录下导入的过程和遇到的问题点,OpenCV版本为4.5.1
首先下载ZXing源码,下载地址如下:https://github.com/zxing/zxing
同时会使用到CMake进行编译,CMake下载地址如下:•Download CMake 我是用的版本是3.22.1,建议版本不要太低,自行查询其他文章安装即可,这里不在赘述。
ZXing源码下载好后解压,我下载的版本是2.3.0

在这个路径下新建一个build文件夹用来存放稍后CMake编译的项目

然后打开CMake,设置源文件目录,和生成目录

源文件目录就是刚才解压缩出来的目录,生成目录就是build目录
然后点击Configure按钮

在弹出的弹窗中选择好VS版本和平台

建议使用VS2022,2017我试过,因为C++版本低,最高就17,所以ZXing项目会有因为C++版本导致的很多报错,当然也可以下载低版本的ZXIng。目前最新的就是2.3.0,所以使用VS2022的C++20版本可以不报错。
我的选择如下:

点击Finish就会自动开始配置。
如果遇到下面这个报错:
建议把ZXing重新下载或者解压,然后按照上面的流程再来一遍
配置完成后如下:

直接点击Generate,配置完成

这样就得到了生成的ZXing项目

使用VS2022打开

生成ZXing项目,得到生成的.lib文件

然后把ZXing源码中的core文件夹里的src文件夹整个复制到自己的C++项目中,找个位置放好。并在里面新建include和ZXing文件夹,include中存放刚才的.lib文件,ZXing文件夹中存放src目录下所有的头文件。
为了方便我把下面这个图片中的所有内容都打包成了压缩包,已经上传到CSDN了,不需要积分和VIP,正在审核,审核完成后会把链接放在这里:https://download.csdn.net/download/qq_41810413/91866073



这些头文件原来是在src目录下和cpp文件放在一起的

然后在自己的C++项目属性的C/C++的附加包含目录中添加头文件所在的文件夹
链接器常规的附加库目录添加刚才的include文件夹
链接器输入中附加依赖项添加ZXIng.lib
至此全部配置完成,验证一下效果
string DecodeDataMatrixFromMat(const Mat& image)
{
if (image.empty()) {
return "";
}
Mat grayMat;
if (image.channels() == 3)
{
cvtColor(image, grayMat, cv::COLOR_BGR2GRAY);
}
else if (image.channels() == 1)
{
grayMat = image;
}
else
{
return "";
}
ZXing::ImageView imageView{
grayMat.data,
grayMat.cols,
grayMat.rows,
ZXing::ImageFormat::Lum
};
ZXing::ReaderOptions hints;
hints.setFormats({ ZXing::BarcodeFormat::DataMatrix });
hints.setTryHarder(true);
auto result = ZXing::ReadBarcode(imageView, hints);
if (result.isValid())
{
return result.text();
}
return "";
}
运行结果如下。

至此完成,希望能对需要的人提供参考
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)