簡體   English   中英

imread命令后的OpenCV Matrix內存釋放

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM