を使用して .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();
}