OpenCV的imread函数读取图片的路径选择相关问题

OpenCV的imread函数读取图片和VideoCapture类读取视频的路径选择相关问题

本文参考了几位博主的帖子。
https://blog.csdn.net/sss_369/article/details/87740843

读取一张图片

注意:这里对后缀名是不区分大小写的。jpg和JPG是一样的,都可以成功读取。

相对路径

相对路径的好处是,图片在项目目录下,拷贝的时候跟着拷贝。再次编译的时候不会丢失。
最常用的方法是把图片拷贝到项目的根目录下面,和cpp文件放在同一个目录,直接访问。

srcImage = imread("01.JPG");

或者在根目录下,新建一个文件夹,如:pictures。把图片拷贝到pictures文件夹下面。

srcImage = imread("pictures//01.JPG");//可以
srcImage = imread("pictures\\01.JPG");//可以
srcImage = imread("pictures/01.JPG");//可以

这三种方式,都是可以的。
而单右斜线形式是不可以的。

srcImage = imread("pictures\01.JPG");//不可以

绝对路径

也可以使用绝对路径,和相对路径类似的。

srcImage = imread("D://Project test//Project1//pictures//01.JPG");//可以
srcImage = imread("D:\\Project test\\Project1\\pictures\\01.JPG");//可以
srcImage = imread("D:/Project test/Project1/pictures/01.JPG");//可以

这三种方式,都是可以的。
而单右斜线形式是不可以的。

srcImage = imread("D:\Project test\Project1\pictures\01.JPG");//不可以

读取多张图片

对于多张图片的处理,一般都是放在某个文件夹下面。由循环去读取。
注意:这里对后缀名是区分大小写的。jpg和JPG是不同的,一定要和文件的后缀名一样。

    //相对路径
	//string InputPath = "pictures\\*.jpg";//可以
	//string InputPath = "pictures//*.JPG";//可以
	//string InputPath = "pictures/*.JPG";//可以
	//string InputPath = "pictures\*.JPG";//不可以
	

	//绝对路径
	string InputPath = "D://Project test//Project1//pictures//*.jpg";//可以
	//string InputPath = "D:\\Project test\\Project1\\pictures\\*.JPG";//可以
	//string InputPath = "D:/Project test/Project1/pictures/*.JPG";//可以
	//string InputPath = "D:\Project test\Project1\pictures\*.JPG";//不可以   
	//-----------------------------------------------------------    
	cout << InputPath << endl;//输出图片路径

	vector<Mat> images;  // 圖片向量
	vector<String> InputFiles;  // 圖片路径向量
	glob(InputPath, InputFiles, false);  
	//用glob函数将InputPath路径下的所有文件名存进InputFiles中,
	//void cv::glob(String pattern, std::vector< String > &result, bool recursive = false);
	//这里的pattern是你需要查找的文件路径,result是一个存储文件名的向量,recursive是一个可选参数,如果设置为true,glob函数会递归查找所有子目录。

	size_t count = InputFiles.size();  //InputFiles.size()代表文件中总共的图片个数

	if (count == 0) //检验是否有图片
	{
		cout << "No image files[*.jpg]" << endl;
		return 0;
	}

	cout << "image count = " << count << endl;//输出图片数量

	for (size_t i = 0; i < count; i++)  //count代表文件中总共的图片个数 
	{
		Mat image = imread(InputFiles[i]);//读取图片
		string OutputPath = "pictures\\" + to_string(i) + ".bmp";//存储路径,文件名,文件格式
		imwrite(OutputPath, image);//存储
		imshow("images", image);//显示一下
		waitKey(500);//500ms后正常运行下一次
	}

读取一段视频

相对路径

相对路径的好处是,视频在项目目录下,拷贝的时候跟着拷贝。再次编译的时候不会丢失。
最常用的方法是把视频拷贝到项目的根目录下面,和cpp文件放在同一个目录,直接访问。

VideoCapture capture;
capture.open("test.mp4");
//或者
VideoCapture capture("test.mp4");

或者在根目录下,新建一个文件夹,如:video。把视频拷贝到video文件夹下面。

capture.open("video//test.mp4");//可以
capture.open("video\\test.mp4");//可以
capture.open("video/test.mp4");//可以

这三种方式,都是可以的。
而单右斜线形式是不可以的。

 capture.open("video\test.mp4");//不可以

绝对路径

也可以使用绝对路径,和相对路径类似的。

capture.open("D://Project test//Project1//video//test.mp4");//可以
capture.open("D:\\Project test\\Project1\\video\\test.mp4");//可以
capture.open("D:/Project test/Project1//video/test.mp4");//可以

这三种方式,都是可以的。
而单右斜线形式是不可以的。

capture.open("D:\Project test\Project1\video\test.mp4");//不可以
  • 9
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值