在写代码时,我们经常需要使用到其他的一些资源,但是对于一些像我这样经常用绝对路径不用相对路径的新手菜鸟来说,看网上的那些关于绝对路径相对路径的介绍资料也有点难理解,毕竟…没试过的话确实不大能理解。

所以我接下来就大概介绍一下在写代码时怎么使用绝对路径和相对路径。

首先,绝对路径,是指你准备要使用的那个资源在你电脑里的储存位置,比如说,我准备使用一个名为yunet.onnx的资源,然后,我如果想知道它的绝对路径,就需要知道它在我这台电脑里的储存位置,你也可以理解为需要知道它的坐标什么的,
然后,它的储存位置,或者说绝对路径,可以通过用鼠标右击它打开属性看到,就像下图

右击该资源文件,打开属性

看到了吗,就是位置那一行,那一行就是它的储存位置

长按左键,一路拖过去,复制,然后找个地方粘贴出来,我们就得到它的储存位置了,就像这里,我弄到的是D:\OpenCV\libfacedetection\libfacedetection.train-master\libfacedetection.train-master\tasks\task1\onnx


得到它的储存位置后,我们要想弄出它的绝对路径就简单多了,
D:\OpenCV\libfacedetection\libfacedetection.train-master\libfacedetection.train-master\tasks\task1\onnx\yunet.onnx
这个就是它的绝对路径。
简单来说,就是每个反斜杠“\”处,再加一个反斜杠,变成“\”,最后再在这后面加上\yunet.onnx,也就是文件名.后缀名。
这样就得到它的绝对路径了,然后我们在写代码时要使用这个资源,就相应的载入就好了,比如我的这个

//绝对路径
cv::String model_path = "D:\\OpenCV\\libfacedetection\\libfacedetection.train-master\\libfacedetection.train-master\\tasks\\task1\\onnx\\yunet.onnx";int backendId = 0;
int targetId = 0;  float scoreThreshold = 0.9;
float nmsThreshold = 0.3;
int topK = 5000;//资源文件的使用
cv::Ptr<cv::FaceDetectorYN> detector =   cv::FaceDetectorYN::create(model_path, "", cv::Size(320, 320), scoreThreshold, nmsThreshold, topK, backendId, targetId);

当然,这里也要提醒一下各位,绝对路径一般比较适合你在练习写代码时使用,因为这样你不用一直去改动你资源文件的位置,而且只要使用它的时候你甚至可以直接复制之前写代码时留下的它的绝对路径,比起相对路径来说,绝对路径对于我这种懒人菜鸟来说简直不要太友好,只要你不改动你那个资源文件的位置,那个绝对路径你就可以一直使用,在你的电脑里运行代码也不会报错。
注意:是不要改动你那个资源文件的位置,你的那个绝对路径才能一直用,如果你哪天不小心给那个资源文件挪了位置,你之前的绝对路径都要改,不然会报错找不到文件。

竟然绝对路径是懒人练习代码的福音,那为什么还要用相对路径呢?
因为我们的代码要在别的地方,在别人的电脑里运行的话,绝对路径十有八九是用不了了,会报错,原因很简单,别人电脑里没有你的那个资源文件,又或者别人电脑里有那个资源文件,但是它在别人电脑里的储存位置大概率不会和你一模一样,于是在别人电脑里运行你的代码时,代码会报错找不到文件。
这个时候我们就要使用相对路径了。
如果你的代码已经写好了,那就将原本的绝对路径替换成相对路径就好了。

相对路径是按照你代码所在的位置去推算你那个资源文件所在位置来进行载入的,如果你那个资源文件在的位置距离代码所在的位置太远的话,我建议你还是复制一下那个资源粘贴到代码所在的那个文件夹下吧,这样相对路径的使用会简单很多,而且把你放有代码的那个文件夹压缩发给别人,别人打开后你的代码还是能用。

接下来就介绍一下相对路径在代码里怎么用。

相对路径:
使用cv::String model_relative_path = “yunet.onnx”;或者cv::String model_relative_path = “./yunet.onnx”;时,应该将onnx放在main.cpp所在的那一个路径下
例如:假设main.cpp所在的路径为"D:\OpenCV\ImageRead\疲劳驾驶管理系统47\疲劳驾驶管理系统47\main.cpp"
则:onnx的绝对路径应该为"D:\OpenCV\ImageRead\疲劳驾驶管理系统47\疲劳驾驶管理系统47\yunet.onnx"
也就是说资源文件yunet.onnx应该放在main.cpp的旁边,在同一级,如下图

使用示例

//相对路径
cv::String model_relative_path = "./yunet.onnx";int backendId = 0;
int targetId = 0;
float scoreThreshold = 0.9;
float nmsThreshold = 0.3;
int topK = 5000;//载入资源文件
cv::Ptr<cv::FaceDetectorYN> detector = cv::FaceDetectorYN::create(model_relative_path, "", cv::Size(320, 320), scoreThreshold, nmsThreshold, topK, backendId, targetId);

使用cv::String model_relative_path = “…/yunet.onnx”;时,应该将onnx放在main.cpp的上一级文件夹中
例如:假设main.cpp所在的路径为"D:\OpenCV\ImageRead\疲劳驾驶管理系统47\疲劳驾驶管理系统47\main.cpp"
则:onnx的绝对路径应该为"D:\OpenCV\ImageRead\疲劳驾驶管理系统47\yunet.onnx"
也就是说资源文件yunet.onnx应该放在main.cpp的上一级,如下图

使用示例

//相对路径
cv::String model_relative_path = "../yunet.onnx";int backendId = 0;
int targetId = 0;
float scoreThreshold = 0.9;
float nmsThreshold = 0.3;
int topK = 5000;//载入资源文件
cv::Ptr<cv::FaceDetectorYN> detector = cv::FaceDetectorYN::create(model_relative_path, "", cv::Size(320, 320), scoreThreshold, nmsThreshold, topK, backendId, targetId);

关于在写代码时如何使用绝对路径与相对路径及其简单介绍相关推荐

  1. 随笔 | 写代码时极有可能面临的焦虑

    随笔 | 写代码时极有可能面临的焦虑 本科学管理,被诸如<市场营销学>这类课程的作业搞得焦头烂额时,就会羡慕学计算机(或更广一点如「工科」)的同学:工程问题,有绝对的标准与尺度:不像这种经 ...

  2. 写代码时尽量少用复制粘贴(ctrl+c, ctrl+v)

    我们在写代码时经常会参考其他人编写的代码或者是从网上搜索查看需要实现的功能用那些代码,这个时候,很多人会很自然的("ctrl+c", "ctrl+v"),简单轻 ...

  3. VSCode内用markdown写代码时出现很多段落标记的解决方案

    在VSCode内用markdown写代码时,出现很多段落标记如下图所示. 开始以为是代码的问题,粘贴了很多次,不行. 把代码放在记事本里,粘贴过来,不行. 敲一段代码试试,也不行. 看来是文件本身出了 ...

  4. 在公司写代码时,我总想回家带娃。

    桔妹导读:离天空最近的地方,是父亲的肩膀.在这个特别的日子里,小编也搜集了一些滴滴年轻的工程师奶爸们的分享,听他们聊一聊当爸的初体验.也借此机会祝福所有做了父亲的工程师们,节日快乐! 内心充满激动和紧 ...

  5. 小白用c++画出手枪,写代码时实属不易,请点赞加关注吧!

    大家好,今天屁孩君给大家带来用c++画出手枪写代码时实属不易,请点赞加关注吧! 废话不多说,直接上代码! #include<iostream> using namespace std; i ...

  6. 当我的生活只剩下写代码时

    我对很多事物都充满好奇,很想探究其中的原理及背后的东西. 记得大一那时,想自己做一个网站,于是到图书馆看HTML的书,那时恰好有个关于网站的比赛,于是以此为借口,买了台电脑--更好的借口是为了学习C语 ...

  7. keil写代码时遇到的问题——warning:implicit declaration of function XXXX is invalid in C99

    在用keil4写实验的时候,遇到了如标题所示的警告,warning:implicit declaration of function "XXXX" is invalid in C9 ...

  8. 听说,有的程序员写代码时,耳机里放的是相声

    我是风筝,公众号「古时的风筝」,一个兼具深度与广度的程序员鼓励师,一个本打算写诗却写起了代码的田园码农! 文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在 ...

  9. 写代码时记录的小技巧

    本文是记录自己写代码时候遇到的一些感觉比较有用/有意思的技巧,怕自己忘了记录一下.如果有想要分享的思路/纠正改进的地方欢迎交流. 如何输出结果 (Verbose Trick) 有关类的输出 1. 如果 ...

最新文章

  1. ITK:计算图像中的局部噪声
  2. 复制url直接能跳过验证_python 爬虫如何突破登录验证
  3. 给被Access过大问题困扰的网站,提供几种解决方案
  4. cad汉仪长仿宋体_长仿宋体字体下载 cad工程机械绘图工程制图国标字体下载
  5. excel转置怎么操作_直接理解转置卷积(Transposed convolution)的各种情况 - 颀周
  6. 华为事件对我们个人成功的启示:为什么自强自立不是出路?
  7. Readhub客户端
  8. 计算机蓝屏无法启动代码50,win7系统出现蓝屏代码0x0000050怎么解决
  9. [Servlet] HttpServletRequest
  10. 抖音Vlog怎么去拍摄,Vlog拍摄赚线吗?
  11. 宠物食品“味及”完成数百万天使轮+融资
  12. shadertoy上手指南
  13. arm-linux-g++: command not found,解决Linux “g++: Command not found”报错问题 | 老左笔记
  14. Red Team后漏洞利用秘籍:如何使用C#语言实现系统调用
  15. iOS常用国外网站清单
  16. 用python爬小说_使用python+Scrapy爬小说
  17. 如何做好建筑行业的信息化建设?
  18. yzoj P2350 逃离洞穴 题解
  19. 如何写高质量的SCI论文摘要 Dr.Wu
  20. 《“透视”个人大数据》项目开发小记 --(二)网络服务端,邮箱验证和手机验证(C#,Java)

热门文章

  1. 计算机地图制图算法与原理重点,计算机地图制图原理概述.ppt
  2. 【C4D】所遇问题及解决方法
  3. 2021年网络安全设备漏洞集合
  4. win10 tomcat闪退问题分析及解决
  5. 机器学习-5朴素贝叶斯
  6. 到达时间差测量目标位置(TDOA)定位
  7. 微信小程序之订阅消息实现
  8. Vol版Vue.NetCore开源项目
  9. 阅读论文Formal verification of smart contracts based on users and blockchain behaviors models
  10. oracle中空值的替换,oracle中空值替换,精度空值(保留小数位数),时间转换