当前位置:网站首页>Win10 x64环境下基于VS2017和cmake-gui配置使用zxing以及opencv,并实现data metrix码的简单检测
Win10 x64环境下基于VS2017和cmake-gui配置使用zxing以及opencv,并实现data metrix码的简单检测
2022-07-05 19:39:00 【heartinsharp】
软件下载:
首先下载并安装VS2017和cmake-gui,链接如下:
VS2017:
1、官网:下载 Visual Studio Tools - 免费安装 Windows、Mac、Linux
2、网盘:链接:https://pan.baidu.com/s/1UNDEgL17D9bsN_-RPAAWcA 提取码:70nl
cmake-gui:
1、官网:Download | CMake
2、网盘:链接:https://pan.baidu.com/s/1upDXsU5_T8Wno5hVC6AATQ 提取码:4v2w
安装方法:
VS2017:双击安装包->修改路径->点击“安装”->安装完成。
安装完之后就是下面这张截图一样了,我们可以点击“启动”来打开。
打开如下图,点击“以后再说“--->”启动VS“
这样就OK了。
因为我的笔记本只有C盘,所以就直接安装在了C盘下面,不过我还是建议安装在C盘下,似乎速度会快一些,VS2017的安装比较慢,需要等好一会。
cmake-gui:双击安装包->一路next(中间有几个地方需要注意)->install->finish->打开cmd,输入cmake /V 可以查看cmake版本。
刚双击打开时安装程序需要先初始化一会,等待就行了。
此处最好是像我这样设置,选中间那个可以直接配置好环境变量,勾上左下角那个可以在桌面创建图标,更方便。
最后,在cmd中输入 cmake /V
源代码下载及编译
代码下载
opencv开源代码下载:
1、官网:Releases - OpenCV、Release 3.4.1 · opencv/opencv_contrib · GitHub
2、网盘(未编译):
链接:https://pan.baidu.com/s/1d17p0EEwPmYP3gu_ZbYTJg 提取码:4h7q
(已编译):
链接:https://pan.baidu.com/s/1EAiCLkw3pCbgZilVNvhsQA 提取码:9xzw
ZXing开源代码下载:
1、官网:GitHub - yuriiz/zxing-cpp: ZXing C++ Library with Python bindings
2、网盘(未编译):
链接:链接:https://pan.baidu.com/s/1We9BYvKdz6XmCTMTEpZA8A 提取码:j9pi
(已编译):
链接:链接:https://pan.baidu.com/s/16XXKt7VqgowRxTnVnWV8sQ 提取码:c780
编译
opencv编译:
1、首先,解压开下载好的opencv源码,里面是长这样子的
2、在其他地方创建一个新的文件夹用于接收opencv编译后的项目文件,如图
上面那个是解压出来的文件夹,下面那个是新创建的文件夹。
3.1、编译生成opencv的vs项目有两种方式,第一种是打开cmake-gui,并按照顺序依次设置,最后点击finish
等待构建完成,完成之后会有一堆红色的,不用管他,我们要改的东西只有BUILD开头的东西以及WITH开头的东西,这块我也不是很懂,建议参考[c++ opencv][基础篇-1]-windows下编译opencv库_亡命天涯ba的博客-CSDN博客以及opencv各个库说明_岁月蹉跎的一杯酒的博客-CSDN博客_opencv库
也可以直接啥都不改,再次点击“configure”和“generate”。
接着再次点击“Configure”,完成后点击“Generate”就行了。
3.2、第二种是使用cmd来编译生成opencv的vs项目
首先在解压出来的opencv-34.1里面新建一个build文件。然后打开cmd并进入build文件目录下,最后输入cmake -G "Visual Studio 15 2017 Win64" .. 并回车
一键生成,很方便
4、查看生成的文件
5、双击“OpenCV.sln”。进入VS2017,默认是debug模式,也可以修改为release模式,右键“解决方案OpenCV”并点击“属性”就能修改,不改好像也可以。然后就单击“生成解决方案”,等待生成,这个要挺久的,慢慢等吧
生成完成后如下图所示。
6、在任意地方创建一个文件夹(名字任意),里面创建一个“include”文件夹和一个“lib”文件夹,如下图所示
然后把在之前生成的文件中的lib文件复制到上面的lib文件夹中。
在之前解压出来的opencv源码中找到include,把里面的opencv和opencv2文件夹复制到上面创建的buildLib文件夹的include中。
再把modules中用到的一些opencv模块的opencv2文件夹也复制到buildLib的include中,直接复制进去就行。这里为了方便可以直接在modules文件夹搜索opencv2,然后全选并复制过去。
最后,在生成的文件夹第一层中找到bin文件夹,将里面的所有dll文件复制到buildLib的bin文件夹中。
这样,外面的准备工作就完成了。
7、接下来新创建一个vs工程,点击“项目”--->“属性”
然后如下修改
接着修改
点击“确定”,然后可以试验下面这个代码,如果成功显示图片就成功了。
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat a;
// 图片路径自己改
a = imread("C:\\Users\\86135\\Desktop\\lena.png", 1);
imshow("a", a);
waitKey(0);
destroyAllWindows();
}
zxing编译
zxing是基于opencv的二维码解码库,所以使用前必须先把opencv配置好。配置的方法与opencv基本一致,也是
1、先创建一个新的文件夹用于存放cmake生成的vs项目,然后用cmake来生成这个 vs项目,此处我使用cmd来生成,其实就是使用命令 cmake -G "Visual Studio 15 2017 Win64" .. 来生成。
在解压出来的文件夹中新建一个build文件夹
打开cmd进入build所在的文件夹,输入命令 cmake -G "Visual Studio 15 2017 Win64" ..并回车执行。
报错了,说找不到opencv的配置项,这里我们需要在zxing的cmakelists里面添加一行
set(OpenCV_DIR C:/Users/86135/Desktop/every/Opencv/buildLib/lib)
就像这样
保存退出,进入到刚刚的cmd再来一次刚刚的命令。
慢着,还得把opencv的cmake文件添加到相应位置。还记得我们刚刚生成的opencv项目吗,把里面的下面这三个文件复制到buildLib的lib文件夹中,如下图所示
好了,现在应该可以成功生成zxing的vs项目了,我们再来一遍cmd的命令。结果如下:
很好,没有报错,我们查看下build里面的文件。
2、然后用vs2017打开这个项目,设置debug或release,生成解决方案
老样子,双击“zxing.sln”打开vs项目。先设置release,然后生成解决方案。
3、新建一个文件夹来放置include文件和lib文件,然后在新创建的vs项目中添加包含目录和库目录之类的
将生成的lib文件放入上面的lib文件夹中
将下图两个文件夹里面的zxing文件夹复制到上面的include文件夹中
好了,现在zxing外面的配置已经完成了。
4、创建一个vs项目用于跑data matrix解码代码
首先,设置项目的属性,如下所示
填入下面的代码:
//zxing
#include "zxing/LuminanceSource.h"
#include "zxing/Reader.h"
#include "zxing/common/GlobalHistogramBinarizer.h"
#include "zxing/DecodeHints.h"
#include "zxing/datamatrix/DataMatrixReader.h"
#include "zxing/MatSource.h"
#include "zxing/result.h"
#include "zxing/BinaryBitmap.h"
#include "zxing/Binarizer.h"
#include "zxing/Exception.h"
//opencv
#include "opencv2/opencv.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/core/core.hpp"
/******************************************************************************************
Function: DataMatrixDecoder
Description: data matrix二维码解析
Input: image_path:二维码图片路径
Return: 解析结果
*******************************************************************************************/
std::string DataMatrixDecoder(std::string image_path) {
//初始化解析结果
std::string content = "";
//读取图片
cv::Mat matSrc = cv::imread(image_path, 1);
//读取失败则返回
if (!matSrc.data) {
fprintf(stderr, "read image error: %s", image_path.c_str());
return content;
}
try
{
//转化为灰度图
cv::Mat matGray;
cv::cvtColor(matSrc, matGray, CV_BGR2GRAY);
zxing::Ref<zxing::LuminanceSource> source = MatSource::create(matGray);
/*int width = source->getWidth();
int height = source->getHeight();*/
/*fprintf(stderr, "image width: %d, height: %d\n", width, height);*/
zxing::Ref<zxing::Reader> reader;
reader.reset(new zxing::datamatrix::DataMatrixReader);
zxing::Ref<zxing::Binarizer> binarizer(new zxing::GlobalHistogramBinarizer(source));
zxing::Ref<zxing::BinaryBitmap> bitmap(new zxing::BinaryBitmap(binarizer));
//开始解码
zxing::Ref<zxing::Result> result(reader->decode(bitmap, zxing::DecodeHints(zxing::DecodeHints::DATA_MATRIX_HINT)));
//获取解析结果
content = result->getText()->getText();
}
catch (zxing::Exception e)
{
}
return content;
}
int main() {
std::string result = DataMatrixDecoder("images/zc2.png");
std::cout << result << std::endl;
}
其中图片的路径需要自己修改。
原图:
结果:
如上图所示,输出字符串“Data Matrix”就成功了!
好了,这次的分享就到此为止了,希望各位大佬指出有错的地方,谢谢!
附录
1、(21条消息) Data Matrix二维码编码原理及其识别技术_刘明进的博客-CSDN博客_datamatrix二维码
2、(21条消息) Windows下安装libiconv库教程(转换字符编码库)_ZXInfinite的博客-CSDN博客_libiconv
3、(22条消息) 配置(三)—— win10 x64环境下利用vs2015编译zxing-cpp及利用zxing C++进行解码_smiler96的博客-CSDN博客
4、C++利用zxing识别二维码 - 灰信网(软件开发博客聚合)
5、【编程视界】C++静态库与动态库深入研究——静态库篇! - 哔哩哔哩
6、[opencv]zxing c++ 库的编译,安装,以及api的介绍 - Xu_Lin - 博客园
7、(22条消息) opencv各个库说明_岁月蹉跎的一杯酒的博客-CSDN博客_opencv库
8、(22条消息) [c++ opencv][基础篇-1]-windows下编译opencv库_亡命天涯ba的博客-CSDN博客
9、(22条消息) CMake来编译OpenCV,细致教程_丢掉幻想,准备斗争的博客-CSDN博客_cmake编译opencv
10、C++ Zxing opencv识别Data Matrix 二维码_Sharon Liu的博客-CSDN博客
11、(21条消息) Opencv安装及常见问题(看这一篇就够了!)_TONYGFX的博客-CSDN博客_opencv安装后找不到在哪
边栏推荐
- 大厂面试必备技能,2022Android不死我不倒
- 如何安全快速地从 Centos迁移到openEuler
- 城链科技数字化创新战略峰会圆满召开
- [Collection - industry solutions] how to build a high-performance data acceleration and data editing platform
- shell编程基础(第9篇:循环)
- How to choose the notion productivity tools? Comparison and evaluation of notion, flowus and WOLAI
- IFD-x 微型红外成像仪(模块)关于温度测量和成像精度的关系
- 【无标题】
- Force buckle 729 My schedule I
- 太牛了,看这篇足矣了
猜你喜欢
How to apply smart contracts more wisely in 2022?
Recommended collection, my Tencent Android interview experience sharing
Reflection and imagination on the notation like tool
大厂面试必备技能,2022Android不死我不倒
third-party dynamic library (libcudnn.so) that Paddle depends on is not configured correctl
【无标题】
[hard core dry goods] which company is better in data analysis? Choose pandas or SQL
Fuzor 2020軟件安裝包下載及安裝教程
安卓面试宝典,2022Android面试笔试总结
Debezium系列之:记录mariadb数据库删除多张临时表debezium解析到的消息以及解决方法
随机推荐
【硬核干货】数据分析哪家强?选Pandas还是选SQL
众昂矿业:2022年全球萤石行业市场供给现状分析
面试官:Redis中集合数据类型的内部实现方式是什么?
Is it safe for Anxin securities to open an account online?
手机股票开户安全吗?靠不靠谱啊?
成功入职百度月薪35K,2022Android开发面试解答
强化学习-学习笔记4 | Actor-Critic
如何实现游戏中的在线计时器和离线计时器
什么是面上项目
[untitled]
打新债在哪里操作开户是更安全可靠的呢
XaaS 陷阱:万物皆服务(可能)并不是IT真正需要的东西
四万字长文说operator new & operator delete
Fundamentals of machine learning (III) -- KNN / naive Bayes / cross validation / grid search
How about testing outsourcing companies?
No matter how busy you are, you can't forget safety
The binary string mode is displayed after the value with the field type of longtext in MySQL is exported
Reflection and imagination on the notation like tool
全网最全的低代码/无代码平台盘点:简道云、伙伴云、明道云、轻流、速融云、集简云、Treelab、钉钉·宜搭、腾讯云·微搭、智能云·爱速搭、百数云
Postman core function analysis - parameterization and test report