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");//不可以