


How to share the implementation code of how to traverse all pictures in a folder using Python and C++
这篇文章主要介绍了 Python与C++ 遍历文件夹下的所有图片实现代码的相关资料,需要的朋友可以参考下
Pyhton与C++ 遍历文件夹下的所有图片实现代码
前言
虽然本文说的是遍历图片,但是遍历其他文件也是可以的。
在进行图像处理的时候,大部分时候只需要处理单张图片。但是一旦把图像处理和机器学习相结合,或者做一些稍大一些的任务的时候,常常需要处理好多图片。而这里面,一个最基本的问题就是如何遍历这些图片。
用OpenCV做过人脸识别的人应该知道,那个项目中并没有进行图片的遍历,而是用了一种辅助方案,生成了一个包含所有图片路径的文件at.txt,然后通过这个路径来读取所有图片。而且这个辅助文件不仅包含了图片的路径,还包含了图片对应的标签。所以在进行训练的时候直接通过这个辅助文件来读取训练用的图片和标签。
其实如果去看看教程,会发现这个at.txt的生成是通过Python代码来实现。所以今天就来看一下如何用C++来实现文件夹下所有图片的遍历。
当然在此之前还是先给出Python遍历的代码,以备后用。
Python遍历
在之前的数独项目中,进行图像处理的时候用到了遍历文件夹下所有的图片。主要是利用glob模块。glob是python自己带的一个文件操作相关模块,内容不多,可以用它查找符合自己目的的文件。
# encoding: UTF-8 import glob as gb import cv2 #Returns a list of all folders with participant numbers img_path = gb.glob("numbers\\*.jpg") for path in img_path: img = cv2.imread(path) cv2.imshow('img',img) cv2.waitKey(1000)
C++遍历
1. opencv自带函数glob()遍历
OpenCV自带一个函数glob()可以遍历文件,如果用这个函数的话,遍历文件也是非常简单的。这个函数非常强大,人脸识别的时候用这个函数应该会比用at.txt更加方便。一个参考示例如下。
#include<opencv2\opencv.hpp> #include<iostream> using namespace std; using namespace cv; vector<Mat> read_images_in_folder(cv::String pattern); int main() { cv::String pattern = "G:/temp_picture/*.jpg"; vector<Mat> images = read_images_in_folder(pattern); return 0; } vector<Mat> read_images_in_folder(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.push_back(imread(fn[i])); imshow("img", imread(fn[i])); waitKey(1000); } return images; }
需要注意的是,这里的路径和模式都用的是cv::String。
2. 自己写一个遍历文件夹的函数
在windows下,没有dirent.h可用,但是可以根据windows.h自己写一个遍历函数。这就有点像是上面的glob的原理和实现了。
#include<opencv2\opencv.hpp> #include<iostream> #include <windows.h> // for windows systems using namespace std; using namespace cv; void read_files(std::vector<string> &filepaths,std::vector<string> &filenames, const string &directory); 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) { //Mat src = imread(filepaths[i]); Mat src = imread(folder + filenames[i]); if (!src.data) cerr << "Problem loading image!!!" << endl; imshow(filenames[i], src); waitKey(1000); } return 0; } void read_files(std::vector<string> &filepaths, std::vector<string> &filenames, const string &directory) { HANDLE dir; WIN32_FIND_DATA file_data; if ((dir = FindFirstFile((directory + "/*").c_str(), &file_data)) == INVALID_HANDLE_VALUE) return; /* No files found */ do { const string file_name = file_data.cFileName; const string file_path = directory + "/" + file_name; const bool is_directory = (file_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0; if (file_name[0] == '.') continue; if (is_directory) continue; filepaths.push_back(file_path); filenames.push_back(file_name); } while (FindNextFile(dir, &file_data)); FindClose(dir); }
3. 基于Boost
如果电脑上配置了boost库,用boost库来实现这一功能也是比较简洁的。为了用这个我还专门完全编译了Boost。
然而只用到了filesystem。
#include <boost/filesystem.hpp> #include<iostream> #include<opencv2\opencv.hpp> using namespace cv; using namespace std; using namespace boost::filesystem; void readFilenamesBoost(vector<string> &filenames, const string &folder); int main() { string folder = "G:/temp_picture/"; vector<string> filenames; readFilenamesBoost(filenames, folder); for (size_t i = 0; i < filenames.size(); ++i) { Mat src = imread(folder + filenames[i]); if (!src.data) cerr << "Problem loading image!!!" << endl; imshow("img", src); waitKey(1000); } return 0; } void readFilenamesBoost(vector<string> &filenames, const string &folder) { path directory(folder); directory_iterator itr(directory), end_itr; string current_file = itr->path().string(); for (; itr != end_itr; ++itr) { if (is_regular_file(itr->path())) { string filename = itr->path().filename().string(); // returns just filename filenames.push_back(filename); } } }
各种方法都记录在这里,以便以后用的时候查找。
The above is the detailed content of How to share the implementation code of how to traverse all pictures in a folder using Python and C++. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

PHP is mainly procedural programming, but also supports object-oriented programming (OOP); Python supports a variety of paradigms, including OOP, functional and procedural programming. PHP is suitable for web development, and Python is suitable for a variety of applications such as data analysis and machine learning.

The history and evolution of C# and C are unique, and the future prospects are also different. 1.C was invented by BjarneStroustrup in 1983 to introduce object-oriented programming into the C language. Its evolution process includes multiple standardizations, such as C 11 introducing auto keywords and lambda expressions, C 20 introducing concepts and coroutines, and will focus on performance and system-level programming in the future. 2.C# was released by Microsoft in 2000. Combining the advantages of C and Java, its evolution focuses on simplicity and productivity. For example, C#2.0 introduced generics and C#5.0 introduced asynchronous programming, which will focus on developers' productivity and cloud computing in the future.

PHP is suitable for web development and rapid prototyping, and Python is suitable for data science and machine learning. 1.PHP is used for dynamic web development, with simple syntax and suitable for rapid development. 2. Python has concise syntax, is suitable for multiple fields, and has a strong library ecosystem.

PHP originated in 1994 and was developed by RasmusLerdorf. It was originally used to track website visitors and gradually evolved into a server-side scripting language and was widely used in web development. Python was developed by Guidovan Rossum in the late 1980s and was first released in 1991. It emphasizes code readability and simplicity, and is suitable for scientific computing, data analysis and other fields.

Golang is better than C in concurrency, while C is better than Golang in raw speed. 1) Golang achieves efficient concurrency through goroutine and channel, which is suitable for handling a large number of concurrent tasks. 2)C Through compiler optimization and standard library, it provides high performance close to hardware, suitable for applications that require extreme optimization.

Golang is better than Python in terms of performance and scalability. 1) Golang's compilation-type characteristics and efficient concurrency model make it perform well in high concurrency scenarios. 2) Python, as an interpreted language, executes slowly, but can optimize performance through tools such as Cython.

Python is easier to learn and use, while C is more powerful but complex. 1. Python syntax is concise and suitable for beginners. Dynamic typing and automatic memory management make it easy to use, but may cause runtime errors. 2.C provides low-level control and advanced features, suitable for high-performance applications, but has a high learning threshold and requires manual memory and type safety management.

Python is better than C in development efficiency, but C is higher in execution performance. 1. Python's concise syntax and rich libraries improve development efficiency. 2.C's compilation-type characteristics and hardware control improve execution performance. When making a choice, you need to weigh the development speed and execution efficiency based on project needs.
