因为工作需要所以需要在原有的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 ""; 
}

运行结果如下。

至此完成,希望能对需要的人提供参考

Logo

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

更多推荐