約3000枚の画像を含むいくつかのディレクトリを反復しようとしています。画像を読み込みます。画像が読み込まれたら、解放します。これは、エラーを再現するために作成できる最小のプログラムです。
124枚の画像をロードしてリリースした後、プログラムは画像のロードを停止します。これはメモリの問題だと思いますが、プログラムが画像の読み込みを停止する原因が正確にはわかりません。
MacでOpenCVを使用しています。使用しているバージョンをどれだけ正確に把握できるかわかりません。
これが私のプロジェクトのコードです。
bool FaceDetectionStrategy::detectFace(std::string imagePath) {
IplImage *img = cvLoadImage(imagePath.c_str(), CV_LOAD_IMAGE_COLOR);
if (img) {
std::cout << "Image loaded " << imagePath << std::endl;
cvReleaseImage(&img);
} else {
std::cout << "Image not loaded " << imagePath << std::endl;
}
return true;
}
このメソッドは、反復処理しているディレクトリ内のすべての画像に対して呼び出されます。124枚の画像の後、if(img)部分はfalseと評価され、elseブランチが実行されます。後でプログラムの他の部分から画像を読み込もうとすると、それらも読み込まれません。
編集はメモリの問題ではありません。Mac Osの標準の最大オープンファイル数は、512に変更すると256になり、251の画像を開くことができます。そのため、OpenCVは画像ファイルを読み込んだ後に閉じないようです。