因為最近在做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;
}
