iT邦幫忙

0

(已解決) OpenCV 的記憶體堆積問題

jyc 2020-10-20 10:25:04572 瀏覽

小弟前陣子用OpenCV跟C++幫客戶寫了一個dll,功能很簡單,只是單純把丟進來的影像縮小尺寸然後顯示而已,但是上機測試後卻發現整個程式的記憶體使用量會幾K幾K的加上去,連續跑了幾天後就把記憶體吃光了,如果沒有呼叫這個dll,就不會有這現象。

可是小弟的程式內容很單純

void MyFunction(unsigned char *image, int width, int height)
{
    int size = width * height;
    
    Mat old_image(height, width, CV_8U);
    Mat new_image(height/2, width/2, CV_8U);
    
    memcpy(old_image.data, image, size);
    cv::resize(old_image, new_image, Size(), 0.5, 0.5);
    
    imshow("resized image", new_image);
    waitKey(1000);
    destroyAllWindows();
    
    old_image.release();
    new_image.release();
    
    delete[] image;
}

小弟的OpenCV換用過3.4.11跟4.1.1的版本,都是會有記憶體堆上去的問題,查遍google也沒看到有人有類似的問題,最後小弟是用自己寫的碼去取代 cv::resize 這行來解決。

請問各位有經驗的大神,小弟原來的程式有那裡呼叫錯了嗎? 雖然有想過會不會是OpenCV本身的bug,但是作為這麼多人使用的library,如果是bug的話,也沒道理只有我有這個問題啊

可以參考:
https://stackoverflow.com/questions/34434401/avoiding-memory-leaks-while-using-vectormat

可以針對這個函數大量呼叫,觀察記憶體的消長,就知道哪裡發生memory leak。
jyc iT邦新手 5 級 ‧ 2020-11-06 12:34:28 檢舉
小弟這個問題最近終於解決了,還真的是 OpenCV 的 bug,改用最新的 4.5 版本就好了,在這邊留個紀錄供有遇到類似問題的人參考。

尚未有邦友回答

立即登入回答