Я пытаюсь использовать cvBlob для некоторой обработки, но я заметил, что он использует всю оперативную память, и я заметил это
IplImage* image2=cvCloneImage(&(IplImage)thresh);
IplImage *labelImg=cvCreateImage(cvGetSize(image2), IPL_DEPTH_LABEL, 1);
cvb::CvBlobs blobs;
unsigned int result=cvLabel(image2, labelImg, blobs);
cvb::cvRenderBlobs(labelImg, blobs, image2, image2);
for (cvb::CvBlobs::const_iterator it=blobs.begin(); it!=blobs.end(); ++it)
{
drawObject(it->second->centroid.x, it->second->centroid.y,camera);
drawLines(
it->second->minx,
it->second->maxx,
it->second->minx,
it->second->maxx,
it->second->miny,
it->second->miny,
it->second->maxy,
it->second->maxy,
camera);
}
thresh = Mat(image2);
при первых двух вызовах, которые создают IPLImages, они теряют около 1 Мб памяти. На каждой итерации память, используемая моим exe, увеличивается на 2 Мб. Если я прокомментирую эти строки, он останется неизменным.
tldr; как переработать IPLImages
cvReleaseImage(&image2);
cvReleaseImage(&labelImg);
cvReleaseBlobs(blobs);
Других решений пока нет …