[討論] 如何釋放影像內存的疑問?已回收

看板MATLAB作者 (白開水)時間15年前 (2011/01/04 21:23), 編輯推噓1(104)
留言5則, 2人參與, 最新討論串1/1
我現在才意識到原來寫程式還有內存的顧慮(Orz) 剛剛在找IMAQMEM這個指令的問題才發現到,老師有跟我說希望程式是無限循環 然後要停指它才停止. 我電腦是2G記憶體,我計算過時間大約只能跑3分20多秒(我沒設內存限制,電腦應該是看我 本身記憶體有多大下去run,學弟是跟我說一定是我寫法有問題...) 所以要釋放記憶體,也就是刪除不要的內存變量 clear all; 我想問的是 1.一般我看到的影像流程是電腦先把攝影機擷取的影像儲存到記憶體內 然後在matlab秀出,這時候內存一直在記憶當中. 還是說每次matlab在秀攝影機擷取的圖片後都會自動釋放內存無須給予指令? 2.我的即時無線迴圈程式寫法時有異常消耗內存嗎? 如何刪除釋放每次秀出後的影像內存? vid = videoinput('winvideo',1); bx = ones(480,640); set(vid, 'FramesPerTrigger', Inf); set(vid, 'ReturnedColorspace', 'rgb') vid.FrameGrabInterval = 5; start(vid) while (vid.FramesAcquired > -1 ) data = getsnapshot(vid); diff_im = imsubtract(data(:,:,1), rgb2gray(data)); diff_im = medfilt2(diff_im, [3 3]); diff_im = im2bw(diff_im,0.27); diff_im = bwareaopen(diff_im,100); bw = bwlabel(diff_im,8); bw = fliplr(bw); stats = regionprops(bw, 'BoundingBox', 'Centroid'); imshow(bx) hold on for object = 1:length(stats) bd = stats(object).Centroid; bd(1)=round(bd(1)); bd(2)=round(bd(2)); plot(bd(1),bd(2),'-m+ '); a=text(bd(1)+4,bd(2), strcat('X: ', num2str(round(bd(1))), ' Y: ', num2str(round(bd(2))))) ; set(a, 'FontName', 'Arial', 'FontWeight', 'bold', 'FontSize', 12, 'Color', 'black'); end hold off end stop(vid) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 120.96.35.20

01/05 08:17, , 1F
我過往的經驗是clear all寫在function內,它會等到迴圈中斷
01/05 08:17, 1F

01/05 08:17, , 2F
程式控制權回到command window後才執行
01/05 08:17, 2F

01/05 08:18, , 3F
當初我是把function轉寫成script避開這個問題
01/05 08:18, 3F

01/05 11:28, , 4F
感謝回覆,可是你那種寫法等於釋無法即時運算呈現?
01/05 11:28, 4F

01/05 11:31, , 5F
我有找到一個flushdata(vid);跑了20分還未斷
01/05 11:31, 5F
文章代碼(AID): #1D8nywGX (MATLAB)
文章代碼(AID): #1D8nywGX (MATLAB)