方法一
主要函数
void cv::glob(String pattern,std::vector<string>&result,bool recursive=false)
分析
String pattern:绝对路径下的照片
pattern = "/home/Data/data/*.jpg"
: 选择*.jpg这一类的图片std::vector< cv::String > & result
:这里必须为CV的String,即路径被存在string类型的vector中bool recursive
:可省去,当recursive为false时,仅仅遍历指定文件夹内符合模式的文件;当recursive为true时,会同时遍历指定文件夹的子文件夹
头文件AI.h
#pragma once
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
class Ve {
public:
vector<Mat> ReadImage(cv::String pattern);
};
cpp文件:
#include "AI.h"
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main()
{
cv::String pattern = "E:\\VSprojeect\\test\\test\\images\\*.png";
Ve ve;
vector<Mat> img = ve.ReadImage(pattern);
return 0;
}
vector<Mat> Ve::ReadImage(cv::String pattern)
{
vector<cv::String> fn;
glob(pattern, fn, false);
vector<Mat> images;
size_t count = fn.size(); //number of png files in images folder
for (size_t i = 0; i < count; i++)
{
images.emplace_back(cv::imread(fn[i]));
imshow("img", imread(fn[i]));
//imwrite("E:\\VSprojeect\\testyolo\\saveimg\\",images);
waitKey(1000);
destroyAllWindows();
}
return images;
}
方法二
当文件夹的图片名称没有规律或者有规律时(通用方法,万能模板)
#include<stdio.h>
#include "opencv2/opencv.hpp"
#include <opencv2\highgui\highgui.hpp>
#include<string>
#include<vector>
#include<iostream>
using namespace cv;
using namespace std;
void main() {
String path = "E:\\VSprojeect\\get_muti_images\\images";//文件夹路径
vector<String>src_test;
glob(path, src_test, false);//将文件夹路径下的所有图片路径保存到src_test中
if (src_test.size() == 0) {//判断文件夹里面是否有图片
printf("error!!!\n");
exit(1);
}
for (int i = 0; i < src_test.size(); i++) {//依照顺序读取问价下面的每张图片,并显示
Mat image = imread(src_test[i]);
imshow("image", image);
waitKey(1000);
image.release();//将Mat释放
destroyAllWindows();
}
}
方法三
文件夹下图片有序时,OpenCV读取方法
#include<stdio.h>
#include "opencv2/opencv.hpp"
#include <opencv2\highgui\highgui.hpp>
#include<string>
#include<iostream>
using namespace cv;
using namespace std;
void main(){
char fileName[500];
Mat pic;
for (int i = 0; i < 110; i++) {//文件夹下面一共有110张图片
printf("start deal:%d\n", i + 1);
sprintf_s(fileName, ".//picture//%d.bmp", i);//提取出文价夹下面的每张图片路径,放到fileName
pic = imread(fileName);//读取fileName路径下面的图片
imshow("tpian", pic);//显示图像
waitKey(1000);//显示延时
}
pic.release();//将Mat释放
}
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。