您不應該首先使用舊的C語法。你應該使用C++語法。另請注意,cvSmooth:
該功能現已過時。使用GaussianBlur(),blur(),medianBlur()或bilateralFilter()。
UPDATE
當你做IplImage ipl_img = mat_img;
你只是創建一個新的標題,沒有數據的副本。所以這不是耗盡你的記憶。讓我用一個小例子顯示它:
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
// Your (green) mat
Mat mat_img(10, 10, CV_8UC3, Scalar(0,255,0));
// To IplImage
IplImage ipl_img = mat_img;
兩個mat_img
和ipl_img
是平等的。沒有涉及的副本。
// It's created only a new header, on the same data
// In fact, changing ipl_img changes also mat_img
cvSet2D(&ipl_img, 1, 2, Scalar(255,0,0));
兩個圖像改成這樣:
// Same here, changing ipl_img changes also mat_img
cvSmooth(&ipl_img, &ipl_img);
return 0;
}
即使平滑後,他們是平等的:
結論
因此,要回答你原來的問題:NO,你並不需要釋放IplImage
,因爲無份參與。你只是創建新的標題,但指向相同的數據。你的內存泄漏在別的地方。
您甚至不需要使用cvarrToMat
,因爲對IplImage
的更改與Mat
中的更改相同。
什麼是cv_proc_image? –
它是cv :: Mat取自函數參數 – erogol
如果您顯示「smooth_type」和「smooth_param1」是什麼,那麼您不應該在第一個位置使用舊的C語法 – Miki