技术标签: cpp libdmtx 软件与库 VS Code opencv
只需要安装C/C++ IntelliSense即可,有些地方提到了code runner插件,但仅对于运行简单的cpp比较方便,添加opencv、libdmtx库时个人觉得不方便。
编写完基本的main.cpp后F5进行Debug,会提示创建用于调试的文件(或在debug窗口单击齿轮config自行创建),上方会显示如下内容,选择C++(GDB/LLDB)后再选择"Defualt Configuration",将会创建一个launch.json文件。这个文件用于调试,但还没有进行编译,所以需要创建编译文件。创建方式同样在命令面板(ctrl+p)输入">"后选择"C/C++: Edit configurations(JSON)"文件创建。
之后需要修改两个文件中的一些设置内容。
// launch.json文件
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg", // 使用cppdbg编译,不要修改
"request": "launch",
"program": "${workspaceFolder}/main.o", //这个是debug目标文件(.o)时的路径和文件,需要修改。
//如果错误会提示找不到xxx.o文件。 ${workspaceFolder}是当前目录,后面跟可执行文件输出文件。
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": true, // 使用外部控制台显示。youtube上视频教程建议使用true
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "build" // 这行默认是不存在的,需要自己添加。
//这句话的意义在于,执行launch.json文件前,首先执行一个名为"build"的task。否则需要每次运行前执行编译过程。
//这个"build"是任意一个名称,但要与后面tasks.json中的"label"保持一致。
}
]
}
之后修改tasks.json文件。tasks.json文件用于编译。
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "build", // 这个名称需要与launch.json文件中的"proLaunchTask"名称一致
"type": "shell",
"command": "g++", // 表示使用gcc指令进行编译。具体参考gcc教程。
"args":[
"-g", "main.cpp", "-o", "main.o",
// -g指令表示生成调试信息,编译的文件是"main.cpp","-o"输出文件为"main.o"。
//输出名称需要与launch.json中"program"中保持一致。
],
"problemMatcher":"$gcc" // 输出错误信息仅保留gcc相关的
}
]
}
修改完这两个文件之后,理论上可以直接运行,然后外部控制台会输出结果。
在windwos中使用visual studio社区版时,执行了几步操作,包括:include上opencv的头文件路径,添加.lib和.dll库。这些操作同样需要在vs code中执行。
打开tasks.json文件,添加编译main时需要搜寻的路径。将"args"中增加如下参数。"-I"表示include的路径,后面加opencv头文件所在路径。
"args":[
"-g", "main.cpp", "-o", "main.o",
"-I","/usr/local/include",
"-I","/usr/local/include/opnecv",
"-I","/usr/local/include/opnecv2",
],
之后回到main.cpp中,添加"#include <opencv2/opencv.hpp>"时可以自动补全,并且使用cv中的函数例如imread等,可以提示函数原型。说明已经成功添加头文件。
但此时运行会报错“`undefined reference to cv:imread",因为并没有添加运行这个函数时的链接库。所以需要进一步进行添加。将"args"参数中再添加以下内容:
"-L","/usr/lib/x86_64-linux-gnu",
"-l", "opencv_core",
"-l", "opencv_highgui",
其中"-L"表示链接库路径。这个可以通过在终端中输入"$pkg-config --libs opencv"查看路径。下图显示了路径为"/usr/lib/x86_64-linux-gnu"
“-l"表示库的名称,/注意到每个库文件命名为libxxx.so。写库名称时不加"lib"与”.so",只有中间部分。由于imread函数只涉及opencv_core与opencv_highgui两个库,故暂时只添加这两个。此时运行main.cpp文件可以正常运行。
通过https://github.com/dmtx/libdmtx下载libdmtx-master.zip并解压,进入目录安装里面的"README"进行安装即可。简单记录如下:
首先将make之后生成的"dmtx.h" 文件和"libdmtx.la"文件复制到当前vs code工程目录下。
此时在main.cpp中包含dmtx头文件可以直接找到,即输入"#include <dmtx.h>"能够自动补全,因为这个头文件已经自动被添加到工程路径中。具体可以通过"ctrl+p"调出panel后输入"c_cpp_properties.json"文件查看。这个文件是自动生成的,里面内容如下:
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [],
"compilerPath": "/usr/bin/clang",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "clang-x64"
}
],
"version": 4
}
其中有一行"includePath",里面"${workspaceFolder}/star-star" 中的"/**"表示当前目录下循环递归的寻找所有文件中的头文件。所以将"dmtx.h"复制到工程文件后就已经被添加了。
之后按照opencv库添加方式,将libdmtx.la添加到tasks.json即可。直接将args参数中加入
"-l", "dmtx",
即可。因为这个库也是在当前路径下包含了。
参考代码如下:
//--------------------------------------
DmtxMessage *msg;
DmtxRegion *reg;
DmtxImage *img;
img = dmtxImageCreate(src.data, src.cols, src.rows, DmtxPack8bppK); //注意使用CV_8UC1时使用DmtxPack8bppK定义。否则要进行相应修改
DmtxDecode *dec = dmtxDecodeCreate(img, 1);
//以下几行用于限制搜寻时间。
//DmtxTime beginTime = dmtxTimeNow();
//long timeout_ms = 100;
//DmtxTime stopTime = dmtxTimeAdd(beginTime, timeout_ms);
reg = dmtxRegionFindNext(dec, stopTime);// stopTime=0 means no constraint
if (reg != NULL)
{
msg = dmtxDecodeMatrixRegion(dec, reg, DmtxUndefined);
if (msg != NULL)
{
cout << msg->output << endl;
dmtxMessageDestroy(&msg);
}
dmtxRegionDestroy(®);
}
//else
// cout << "Cannot find codes..." << endl;
dmtxDecodeDestroy(&dec);
dmtxImageDestroy(&img);
//--------------------------------------
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "build",
"type": "shell",
"command": "g++",
"args":[
"-g", "main.cpp", "-o", "main.o",
"-I","/usr/local/include",
"-I","/usr/local/include/opnecv",
"-I","/usr/local/include/opnecv2",
"-L","/usr/lib/x86_64-linux-gnu",
"-l", "opencv_core",
"-l", "opencv_highgui",
"-l", "dmtx",
],
"problemMatcher":"$gcc"
}
]
}
这篇文档的主要目的还是用于个人记录学习过程,便于今后自己使用。如果能够帮到其他朋友,会格外开心。
文章浏览阅读2.1k次。关于AD19 3维视图的问题新人请教一下AD19 3维视图的问题,我的2维图没有做镜像,以及上下左右翻转,3维图里也没有问题。但是过了几天之后,3维视图却上下镜像了,2维图我也没有做任何翻转镜像什么的,很是疑惑,老哥们帮忙指点指点。..._ad二维图和三维图倒了
文章浏览阅读348次。斐波那契(黄金分割)查找算法_黄金分割查找
文章浏览阅读301次。点击推送更新基础库_微信小程序在真机调试上面控件显示不出来
文章浏览阅读6.2k次,点赞3次,收藏3次。起因今天刚想给vue用springboot建一个服务器时,建项目时选择了JPA和jdbc,但是在application.propertise配置driver-class-name属性值,后面的属性值 com.mysql.jdbc.Driver 爆红 ,让我的小心脏一阵不爽,刚建项目就给我出问题。如图所示:pom.xml文件<!--jpa --><dependency&g..._jdbcutil报红
文章浏览阅读2.3k次。TypeError Traceback (most recent call last) in ----> 1 dates,close = np.loadtxt(‘data.csv’,delimiter=’,’,usecols=(1,6),converters={1:datestr2num},unpack=True)2 pr..._replace() argument 1 must be str, not bytes
文章浏览阅读656次。从Linux内核2.6开始,Linux内核的编译采用Kbuild系统,这同过去的编译系统有很大的不同,尤其对于Linux内核模块的编译。在新的系统下,Linux编译系统会两次扫描Linux的Makefile:首先编译系统会读取Linux内核顶层的Makefile,然后根据读到的内容第二次读取Kbuild的Makefile来编译Linux内核。Linux内核Makefile分类·_kbuild和makefile的区别
文章浏览阅读1k次。lib usb_libusb 编译
文章浏览阅读620次。//联系人:石虎 QQ:1224614774 昵称:嗡嘛呢叭咪一、概念 SVNX是mac下一个开源的图形化操作工具,使用起来比较方便 .支持图形化查看需该,删除,提交,以及解决冲突文件。 二、操作流程 1.双击打开-效果_xcode svnx
文章浏览阅读2.3k次。1. IntroduceAs we all know, most of mobile devices are base on tile-based GPU architecture. For these kinds of GPU, There's no extra performance to fetch frame buffer directly in pixel shader. Corresp_ue4使用opengl
文章浏览阅读8.7k次,点赞6次,收藏40次。clcclearclose all%%画出函数图figure(1);hold on;lb=0;ub=31;%函数自变量范围【0,31】ezplot('X^2',[lb,ub]);%画出函数曲线xlabel('自变量/X')ylabel('函数值/Y')%%定义遗传算法参数NIND=40;%个体数目MAXGEN=20;%最大遗传代数PRECI=20..._单目标优化函数
文章浏览阅读6.1k次。因为觉得android用到滑动的地方比较多,所以在写一篇基础的里字..效果图:代码部分: activity类代码:package com.TouchView;import android.app.Activity;import android.os.Bundle;_event.getpressure()
文章浏览阅读902次。《计算机技能高考模拟试题一》由会员分享,可在线阅读,更多相关《计算机技能高考模拟试题一(4页珍藏版)》请在人人文库网上搜索。1、110计算机工作的环境湿度是越干燥越好。() 计算机技能高考模拟试题(2016年湖北) 组装与维护模块 本套试卷选取3套高考模拟卷,自制而成,请同学们45分钟完成全部答题(2018-06- (标准:总分80分,48分及格,64分良好,64以上优秀) 皿、计算机组装与维修(..._技能高考 windows 复习