当前位置:网站首页>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安装后找不到在哪
边栏推荐
- 多分支结构
- shell编程基础(第9篇:循环)
- HAC集群修改管理员用户密码
- What are the reliable domestic low code development platforms?
- Apprentissage du projet MMO I: préchauffage
- Fuzor 2020 software installation package download and installation tutorial
- MMO项目学习一:预热
- How to convert word into PDF? Word to PDF simple way to share!
- Fundamentals of shell programming (Part 8: branch statements -case in)
- IBM has laid off 40 + year-old employees in a large area. Mastering these ten search skills will improve your work efficiency ten times
猜你喜欢
How to choose the notion productivity tools? Comparison and evaluation of notion, flowus and WOLAI
[FAQ] summary of common causes and solutions of Huawei account service error 907135701
XaaS 陷阱:万物皆服务(可能)并不是IT真正需要的东西
How to apply smart contracts more wisely in 2022?
全网最全的低代码/无代码平台盘点:简道云、伙伴云、明道云、轻流、速融云、集简云、Treelab、钉钉·宜搭、腾讯云·微搭、智能云·爱速搭、百数云
What is the core value of testing?
Summer Challenge database Xueba notes, quick review of exams / interviews~
[OBS] qstring's UTF-8 Chinese conversion to blog printing UTF-8 char*
Using repositoryprovider to simplify the value passing of parent-child components
C#应用程序界面开发基础——窗体控制(5)——分组类控件
随机推荐
关于 Notion-Like 工具的反思和畅想
Bitcoinwin (BCW) was invited to attend Hanoi traders fair 2022
Successful entry into Baidu, 35K monthly salary, 2022 Android development interview answer
如何在2022年更明智地应用智能合约?
测试外包公司怎么样?
[untitled]
Fundamentals of shell programming (Part 8: branch statements -case in)
Do you know several assertion methods commonly used by JMeter?
word如何转换成pdf?word转pdf简单的方法分享!
HiEngine:可媲美本地的云原生内存数据库引擎
[Collection - industry solutions] how to build a high-performance data acceleration and data editing platform
PHP uses ueditor to upload pictures and add watermarks
Mysql如何对json数据进行查询及修改
安信证券在网上开户安全吗?
如何实现游戏中的在线计时器和离线计时器
Postman核心功能解析-参数化和测试报告
Django使用mysqlclient服务连接并写入数据库的操作过程
Notion 类生产力工具如何选择?Notion 、FlowUs 、Wolai 对比评测
不愧是大佬,字节大牛耗时八个月又一力作
力扣 729. 我的日程安排表 I