我正在使用以下函数(成功)在 iOS 中使用 OpenCV 检测人脸,但根据 Instruments,它似乎每秒泄漏 4-5Mb 的内存。
该函数定期从 processFrame() 调用。
通过消除过程,导致问题的是在 face_cascade 上调用 detectMultiScale 的行。
我已经尝试使用自动释放池包围部分(因为在进行视频处理时在非 UI 线程上释放内存之前我遇到了这个问题),但这并没有什么不同。
我也尝试过强制 Faces Vector 释放它的内存,但同样无济于事。
有没有人有任何想法?
- (bool)detectAndDisplay :(Mat)frame
{
BOOL bFaceFound = false;
vector<cv::Rect> faces;
Mat frame_gray;
cvtColor(frame, frame_gray, CV_BGRA2GRAY);
equalizeHist(frame_gray, frame_gray);
// the following line leaks 5Mb of memory per second
face_cascade.detectMultiScale(frame_gray, faces, 1.1, 2, 0 | CV_HAAR_SCALE_IMAGE, cv::Size(100, 100));
for(unsigned int i = 0; i < faces.size(); ++i)
{
rectangle(frame, cv::Point(faces[i].x, faces[i].y),
cv::Point(faces[i].x + faces[i].width, faces[i].y + faces[i].height),
cv::Scalar(0,255,255));
bFaceFound = true;
}
return bFaceFound;
}