Python与C++ 遍历文件夹下的所有图片实现代码
在处理图像处理和机器学习项目时,经常需要对多个图片文件进行遍历。Python和C++作为两种广泛使用的编程语言,在这一领域均有应用。本文将详细介绍如何使用Python和C++遍历文件夹中的所有图片,并且提供相应的实现代码供参考。 首先是Python语言的遍历方法。Python中有一个名为glob的模块,专门用于文件查找,非常适合用来遍历文件夹下的图片文件。具体而言,Python的glob模块可以返回一个文件列表,这些文件名匹配所给的模式字符串。例如,如果想要获取某个目录下所有的.jpg图片,可以使用如下代码: ```python import glob import cv2 # 设置图片路径模式,返回所有.jpg图片的路径列表 img_path = glob.glob("path_to_folder/*.jpg") # 遍历图片路径列表 for path in img_path: # 读取图片并显示 img = cv2.imread(path) cv2.imshow('img', img) cv2.waitKey(1000) # 等待1000毫秒,即1秒 ``` 上述代码首先导入了glob模块和OpenCV的cv2模块,通过glob模块查找所有.jpg格式的图片,然后利用OpenCV的imread函数读取图片并用imshow函数显示出来。 接下来是C++语言的遍历方法。OpenCV库中同样提供了一个glob函数,可以用来遍历特定模式的文件。以下是使用C++遍历文件夹下图片的示例代码: ```cpp #include <opencv2/opencv.hpp> #include <iostream> #include <vector> using namespace std; using namespace cv; // 读取指定文件夹下所有图片并返回包含图片矩阵的vector vector<Mat> read_images_in_folder(const cv::String &pattern) { vector<cv::String> file_names; glob(pattern, file_names, false); vector<Mat> images; for(size_t i = 0; i < file_names.size(); i++) { images.push_back(imread(file_names[i])); imshow("img", images[i]); waitKey(1000); } return images; } int main() { cv::String pattern = "G:/temp_picture/*.jpg"; vector<Mat> images = read_images_in_folder(pattern); return 0; } ``` 在这段代码中,首先包含了OpenCV库和C++标准输入输出库,定义了全局命名空间别名。使用cv::String来定义文件路径,调用glob函数搜索匹配模式的所有文件,并将它们的名称存储到一个字符串向量中。然后,对每一个图片文件路径使用imread函数读取图片,将得到的Mat矩阵存入另一个向量中。imshow函数用于显示图片,并使用waitKey函数实现延时。 在Windows系统中,如果不想使用OpenCV的glob函数,还可以手动实现一个遍历文件夹的函数。这需要调用Windows的API,例如使用Windows.h头文件中的函数来遍历目录。例如,可以利用FindFirstFile和FindNextFile函数来遍历文件夹: ```cpp #include <opencv2/opencv.hpp> #include <iostream> #include <windows.h> #include <vector> #include <string> using namespace std; using namespace cv; void read_files(vector<string>& filepaths, vector<string>& filenames, const string& directory) { WIN32_FIND_DATA findFileData; HANDLE hFind = FindFirstFile((directory + "\\*.*").c_str(), &findFileData); if (hFind == INVALID_HANDLE_VALUE) { cout << "Directory not found\n"; return; } do { if (!(findFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { filepaths.push_back(directory + "\\" + findFileData.cFileName); filenames.push_back(findFileData.cFileName); } } while (FindNextFile(hFind, &findFileData) != 0); FindClose(hFind); } int main() { string folder = "G:/temp_picture/"; vector<string> filepaths, filenames; read_files(filepaths, filenames, folder); // 处理文件路径和文件名 for(size_t i = 0; i < filepaths.size(); ++i) { // 这里可以添加处理文件路径和文件名的代码 } return 0; } ``` 上述代码中,read_files函数接受两个字符串向量和一个文件夹路径作为参数。通过调用Windows API的FindFirstFile和FindNextFile函数来遍历文件夹中的文件和子文件夹,并将找到的文件路径和文件名分别添加到两个向量中。 总结来说,Python和C++通过使用不同的库和方法,都能够实现文件夹中图片的遍历。Python使用glob模块或者OpenCV中的glob函数,而C++使用OpenCV中的glob函数或者Windows API函数如FindFirstFile和FindNextFile。这些方法可以有效地帮助开发者在进行图像处理或机器学习任务时,对大量图片进行高效管理和操作。
- 粉丝: 5
- 资源: 927
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助