ライブラリからFindFirstFile
andを使用して、フォルダーのすべての画像をベクターにロードしました。これにより、すべての画像がベクターに保存されましたが、単に表示したいなどの操作をベクターに対して実行したい場合、予期しない操作が行われ、コードの実行を中断する必要があります。FindNextFile
<windows.h>
images
これが私のコードです:
int _tmain(int argc, _TCHAR* argv[])
{
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
vector<Mat> images;
hFind = FindFirstFile("C:\\test\\*", &FindFileData);
if (hFind != INVALID_HANDLE_VALUE)
{
do {
images.push_back(imread(FindFileData.cFileName , 0));
} while( FindNextFile(hFind,&FindFileData));
}
//int vectorsize = (sizeof(images)/sizeof(Mat));
namedWindow("meh" , CV_WINDOW_AUTOSIZE);
imshow("meh" , images[3]);
waitKey(0);
/*for(int x = 1; x < 8; x++)
{
namedWindow("meh" , CV_WINDOW_AUTOSIZE);
imshow("meh" , images[x]);
waitKey(0);
}*/
/*vector<Mat>::iterator it;
for (it = images.begin(); it != images.end() ; it++) {
imshow("myWin", (*it));
waitKey(0);
}*/
FindClose(hFind);
return 0;
}
ご覧のとおり、ベクトルをイテレータで処理しようとしましたが、で同じエラーが発生しましたimshow
。
次にsizeof
、ベクター内の合計要素を見つけていましたが、失敗しました (ベクターサイズパラメーターが返されたため0
) 。
次に、ベクターからランダムな画像を選択して表示しようとしましたが、で同じエラーが発生しましたimshow
。
EDIT:
test フォルダーに 8 つの画像が含まれていないことを望みますが、ループは 10 回実行されます。これは、ディレクトリ内の 1 番目と 2 番目のファイルが と であるためです.
(..
これは で名前を出力するときに表示されますcout
)。もしそうなら、どうすれば回避できますか?