ビデオ内のいくつかのオブジェクトを追跡するために cvBlobs を使用しています。cvBlobs は、IplImage、cvMat などの型で古い C インターフェイスを使用します。私は、cv::Mat を使用する C++ インターフェイスを使用しています。
したがって、ライブラリを使用するには、2 つの型の間で変換する必要があります。これは機能しますが、メモリの解放に問題があります。プログラムが使用するメモリが増え続けています。
これは私のコードで、一番下にメモリを解放しようとしていることが表示されます (コンパイラ エラー)。
void Tracker::LabelConnectedComponents(Mat& Frame, Mat& Foreground)
{
// Convert to old format, this is the method used in the opencv cheatsheet
IplImage IplFrame = Frame;
IplImage IplForeground = Foreground;
IplImage *LabelImg = cvCreateImage(cvGetSize(&IplFrame), IPL_DEPTH_LABEL, 1);
// Make blobs (IplForeground is the segmented frame, 1 is foreground, 0 background)
unsigned int result = cvLabel(&IplForeground, LabelImg, Blobs);
// Remove small blobs
cvFilterByArea(Blobs, 500, 1000000);
// Draw bounding box
cvRenderBlobs(LabelImg, Blobs, &IplFrame, &IplFrame, CV_BLOB_RENDER_BOUNDING_BOX | CV_BLOB_RENDER_CENTROID);
// Convert back to c++ format
Frame = cvarrToMat(&IplFrame);
// Here are the problems
cvReleaseImage(&IplFrame); // error
cvReleaseImage(&IplForeground); // error
cvReleaseImage(&LabelImg); // ok
}
cvReleaseImage には引数として IplImage** 型があり、これはコンパイラ エラーです。
tracker.cpp|35 col 33 error| cannot convert ‘IplImage* {aka _IplImage*}’ to ‘IplImage** {aka _IplImage**}’ for argument ‘1’ to ‘void cvReleaseImage(IplImage**)’
&IplFrame が正しい引数ではないことはわかっていますが、&&IplFrame は機能しません。これらの 2 つの IplImage を解放するにはどうすればよいですか?