OpenCV实践之路——使用imread()函数读取图片的六种正确姿势
opencv吧
全部回复
仅看楼主
level 6
zeus冰不语 楼主
经常看到有人在网上询问关于imread()函数读取图片失败的问题。今天心血来潮,经过实验,总结出imread()调用的四种正确姿势。
通常我要获取一张图片的绝对路径是这样做的:在图片上右键——属性——安全——对象名称。然后复制对象名称就得到了图片的绝对路径。
如图:
然而这样得到的路径直接复制粘贴到vs里面会直接报错,如下:
可以看出我们获取的绝对路径的表示方法是单右斜线形式的。显然opencv的imread()不支持这种方式。但是!!!经过实验发现imread()除了不支持单右斜线形式,其他斜线形式都支持!!!比如双右斜线形式、双左斜线形式、单左斜线形式、前述三种斜线混合型式都是支持的!!我想知道为什么??
看图,下面的六种方式任何一种都是支持的,都可以成功读取并显示图片。
我个人经常用的方法是第5种,相对路径法。只需要把图像文件放在工程文件夹下和.cpp文件放在一起就行了,读取的时候就可以直接用名字读取,如imread("miao.jpg");
最后一种命令行参数法是源码中比较常见的。设置方法是:
工程——属性——配置属性——调试——命令行参数,然后设置就行了。如图:
设置之后miao.jpg就是argv[1],2.jpg就是argv[2].
完整代码:
#include<opencv2\opencv.hpp>
using namespace cv;
int main(int argc,char* argv[])
{
Mat img;
//-- 1 --双右斜线法
//string imgpath = "C:\\Users\\bingbuyu\\Pictures\\photo\\miao1.jpg";
//-- 2 --双左斜线法
//string imgpath = "C://Users//bingbuyu//Pictures//photo//miao1.jpg";
//-- 3 --单左斜线法
//string imgpath = "C:/Users/bingbuyu/Pictures/photo/miao1.jpg";
//-- 4 --以上三种混合法
//string imgpath = "C:/Users//bingbuyu\\Pictures//photo//miao1.jpg";
//-- 5 --相对路径法
//string imgpath = "miao.jpg";
//-- 6 --命令行参数法
string imgpath = argv[1];
img = imread(imgpath, 1);
imshow("img", img);
waitKey(0);
return 0;
}
以上六种方式任何一种的运行结果:
其实就是打开一张图片而已。
更多的学习内容记录在我的CSDN博客:http://blog.csdn.net/xingchenbingbuyu
欢迎交流指点。
2016年05月11日 08点05分 1
level 6
zeus冰不语 楼主
2016年05月11日 08点05分 2
level 8
请问用的opencv版本是多少?
2016年09月27日 07点09分 3
opencv2.4
2016年09月27日 10点09分
level 3
什么单右斜线,那叫转义符……
2016年10月16日 13点10分 4
[狂汗]之前认知有限。。
2016年10月16日 14点10分
level 1
楼主赞个。
刚发现文件路径编码不对也会造成读取失败。
黏贴过去的字符和cpp文件编号不一致。
2017年11月06日 08点11分 5
level 1
楼主,我做毕业设计的时候,用到cv2. imread 但是只能读取一张图片啊 我要读取同文件夹下的很多图片要怎么操作呢 python
2022年04月17日 19点04分 6
1