[英]OpenCV Matrix memory release after imread command
我有一個for循環,我在其中創建一個本地cv :: Mat對象來存儲圖像。 代碼如下所示:
for (int iter = 0; iter < totalNumberOfIterations; iter++)
{
cv::Mat I = cv::imread(argv[1], 0);
std::cout << "Reference count I: " << *I.refcount << std::endl;
I.release();
}
在循環的第一次迭代期間,我發現內存是為變量“I”分配的,當我調用I.release()時它被釋放。 在后續迭代期間,內存未被釋放,我程序的RAM消耗保持不變。 似乎OpenCV為變量“I”保留了用於優化目的的內存。 這是真的?
變量“I”(* I.refcount)的引用計數在for循環的所有迭代中保持為1。
我正在使用OpenCV 2.4.4,我正在使用gcc 4.6.4編譯我的代碼。 為了檢查內存消耗,我在Ubuntu 13.04機器上使用命令“top”。
編輯:當我不強制OpenCV讀取灰度圖像時,我注意到內存正在為變量“I”釋放。 (注意在imread命令中第二個參數設置為“1”)。
cv::Mat I = cv::imread(argv[1], 1);
您是否嘗試在for循環之前聲明Mat,在每次迭代時覆蓋它,然后釋放它?
IE
cv::Mat I;
for (int iter = 0; iter < totalNumberOfIterations; iter++)
{
I = cv::imread(argv[1], 0);
std::cout << "Reference count I: " << *I.refcount << std::endl;
}
I.release();
當然,這並沒有解決它只發布一次的潛在問題,但我相信它會產生同樣的效果。 或者有沒有理由你不想這樣做?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.