我使用 .txt 文件从 .txt 文件中获取值ifstream
。我还使用windows
库来读取文件夹中的所有文件,即循环直到到达文件夹末尾。在这个循环中,我从 txt 文件中读取值并将其添加到使用push_back
.
这是有问题的代码部分:
Mat trainme(0, dictionarySize, CV_32FC1);
Mat labels(0, 1, CV_32FC1); //1d matrix with 32fc1 is requirement of normalbayesclassifier class
hTrain = FindFirstFile(full_path, &TrainData);
if (hTrain != INVALID_HANDLE_VALUE)
{
ifstream file("c:\\222\\labels.txt");
string line;
do {
strcpy(loc,DirSpec);
Mat img = imread(strcat(loc,TrainData.cFileName), 0);
cout<<"Processing file: "<<TrainData.cFileName<<endl;
if (!img.data){
cout << "Image data not loaded properly: " <<TrainData.cFileName<< endl;
cin.get();
}
vector<KeyPoint> keypoints;
features->detect(img, keypoints);
if(keypoints.empty()) cout<<"Cannot find keypoints in image: "<<TrainData.cFileName<<endl;
Mat bowDescriptor;
bowDE.compute(img, keypoints, bowDescriptor);
trainme.push_back(bowDescriptor);
getline(file, line);
labels.push_back(line);
strcpy(loc,"");
} while( FindNextFile(hTrain,&TrainData));
}
问题出现在labels.push_back(line);
3 次循环后的线路上。我的意思是文件被读取了 3 次,然后出现错误:Access violation writing location
. 并指向这一行memcpy.asm
:
mov [edi],al ;U - put byte in destination
我无法弄清楚它为什么会失败。我认为这可能是传输string
格式的问题,所以我使用float value = atof(line)
了但它给出了一个错误,它无法从字符串格式转换并且它只能采用旧的 c 样式字符串。
这是labels.txt中包含的内容
1
2
2
2
1
2
2
2
谢谢你的关注。
更新:我尝试将文件读取移出主循环并使用while(file.good())
但我仍然在同一个地方遇到同样的错误。我不知道为什么。
string line;
ifstream file("c:\\222\\labels.txt");
if (file.is_open())
{
while (file.good() )
{
getline (file,line);
labels.push_back(line);
}
file.close();
}