因為最近在做LPR(車牌識別)的小項目,需要把圖片樣本導入並訓練,所以寫了一個小程序。
在參考了網上部分資料后,得到目標目錄charSamples下,文件夾1里所有50個樣本圖片文件的路徑。
------------------------------------------------------------------
1.dirent.h
dirent,LINUX系統下的一個頭文件,在這個目錄下/usr/include,為了獲取某文件夾目錄內容,所使用的結構體。
引用頭文件#include<dirent.h>
struct dirent
{
long d_ino;/* inode number 索引節點號 */
off_t d_off; /* offset to this dirent 在目錄文件中的偏移 */
unsigned short d_reclen;/* length of this d_name 文件名長 */
unsigned char d_type;/* the type of d_name 文件類型 */
char d_name [NAME_MAX+1];/* file name (null-terminated) 文件名,最長256字符 */
}
-------------------------------------------------------------------
2.實現過程
這是我保存的圖片路徑圖:
--------------------------------------------------------------------------------------------------------------
執行效果:
3.程序附錄
#include <dirent.h> #include <stdio.h> #include<iostream> #include<vector> using namespace std; vector <string> findfile(string path); int main(int argc, char *argv[]) { vector<string> Filename = findfile("charSamples/1/"); } vector <string> findfile(string path) { DIR *dp; struct dirent *dirp; vector<std::string> filename; if( (dp=opendir(path.c_str()) )==NULL ) perror("open dir error"); while( (dirp=readdir(dp) )!=NULL ) filename.push_back(path + string(dirp->d_name)); for (int i = 2;i<filename.size();i++) cout<<i<<":"<<filename[i]<<endl; closedir(dp); return filename; }
有點疑惑:輸出的時候,我是以 I = 2 為起始的,因為 I= 0和1 的時候輸出的是一個“.”符號,不知道為什么。
最后,圖片文件是這樣的,其他文件也應該差不多,大家可以多試試。
目的:從完整路徑中提取文件名、不帶后綴的名字、后綴名
如下:
#include <iostream> #include <string> using namespace std; void main() { string path = "C:\Users\Administrator\Desktop\text\data.22.txt"; //1.獲取不帶路徑的文件名 string::size_type iPos = path.find_last_of('\') + 1; string filename = path.substr(iPos, path.length() - iPos); cout << filename << endl; //2.獲取不帶后綴的文件名 string name = filename.substr(0, filename.rfind(".")); cout << name << endl; //3.獲取后綴名 string suffix_str = filename.substr(filename.find_last_of('.') + 1); cout << suffix_str << endl; }