我正在尝试迭代一些包含大约 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 标准最大打开文件数为 256 后将其更改为 512 我可以打开 251 个图像。所以看起来OpenCV在加载图像文件后并没有关闭它们。