原文地址http://hi.baidu.com/cloverhouse/item/94e886a7816e2b268819d344
之前在寫程序的時候,眼看着隨着運行時間增加,內存耗用率,直線上升,
最終out of memory了,程序直接崩潰了
私心想着一定又是哪裏沒有釋放空間了 一點一點查找
然後發現我忽略的很重要的一點 那就是 cvLoadImage函數
之前一直稀裏糊塗的不知道這個函數會不會自動分配空間
爲了安全總是這樣寫 IplImage* img = cvCreateImage( size, type, cn );
img = cvLoadImage( ... );
後來索性 IplImage* img = cvLoadImage( ... );
就這樣暈暈乎乎的 第一種是知道釋放空間的 第二種卻總是沒有釋放
所以這次出現問題 決定好好查查這個函數:
Opencv包含的庫:
CxCore 提供基本數據結構
Cv 提供圖像處理有關函數
HighGUI 爲用戶提供簡單易用的圖形用戶接口(交互有關 )
從這裏看cvLoadImage爲讀取圖像到程序涉及交互 源文件應該存於 HighGUI庫中
位置:" Opencv\otherlibd\highgui\loadsave.cpp "
查看 icvLoadImage函數 會發現有cvCreateImage函數
因此此過程是有創建空間的,正確的做法就是:
IplImage* img = cvLoadImage(...);
cvReleaseImage(&img);
一定要記得及時釋放空間,小的程序可能體現不出來,當需要循環處理多個圖像時就會看見區別了。