一个困扰了好几天的问题,突然就看到了这篇博客,学到的不仅是问题的解决,而是解决问题的方法!所以转载分享给大家。
原文
在这里给大家说一下OpenCV解决绝对路径导入图片的问题imread();
以上是我在用imread的时候读入图片的代码,总是报错解决不了,然后看了一下路径感觉也对。但是就是查不出什么错误。然后我就写了一个string类型的path来保存我的地址,然后在imread里面直接用path。通过打断点我发现了代码错误的问题。
在这里可以看到我的path里面的路径D:\test\timg.jpg前面有两个问号。这就导致了路径的错误。因为我是直接粘贴的地址所以导致路径错 误,所以我自己用手打了一遍路径,结果正确的显示。
imread()读入图片的时候,路径要用“\”斜杠,或者是“/”斜杠
原因如下:
在C里面,输出字符串时,如果想输出一个换行,那就要加上’\n’这个标志,类似的,输出一个TAB,就加上’\t’,也就是说,反斜杠("")这个符号会把跟在它后面的字符结合起来转义成其它字符。根据这个原理,如果想输出双引号(’"’),就需要输入’"’,这样才会将包含了双引号的字符串正确的写入内存中。那么如果想输入一个反斜杠呢?很简单,只要敲’'就可以了。如果"C:\Windows\System"这个路径字符串交给C编译器编译,实际写入内存的字符串并没有包含反斜杠"",甚至紧跟在反斜杠后面的字母也一起被转义成了其它的字符,再次调用的话势必会出问题。
然后就是要注意粘贴的时候要注意路径是否正确。因为复制粘贴地址的时候会有些隐藏的字符在里面,导致路径错误,所以有时候不要为了省时间导致这些小错误的出现。
敲代码的时候也要有时候一个小小的细节就会导致整个代码的错误。所以细节决定成败!敲代码一定要认真!
————————————————
版权声明:本文为优快云博主「Ating~」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/weixin_42781040/article/details/97793368
分界线
解决了上面的问题后,自己尝试了六种 imread 读取图片路径的表示方法,亲测以下全部可以:
1.双右斜线法
2.双左斜线法
3.单左斜线法
4.以上三种混合法
5.相对路径法
6.命令行参数法
#include<opencv2\opencv.hpp>
using namespace cv;
using namespace std;
int main(int argc, char* argv[])
{
Mat Img;
//双右斜线法
string imgpath = "E:\\program\\2.jpg";
//双左斜线法
//string imgpath = "E://program//2.jpg";
//单左斜线法
//string imgpath = "E:/program/2.jpg";
//以上三种混合法
//string imgpath = "E://program/2.jpg";
//相对路径法
//string imgpath = "2.jpg";
//命令行参数法
//string imgpath = argv[1];
Img = imread(imgpath,1);
imshow("img", Img);
waitKey(0);
return 0;
}
最后一种 命令行参数法 需要在 “项目属性——调试——命令参数” 添加命令。
图片放在cpp文件同一目录下