看板 MATLAB 關於我們 聯絡資訊
大家好 我想使用Matlab把2880張png照片(每張約500kb)存成影片。 但是程式碼寫完之後,跑了平行處理,還是會把伺服器的記憶體吃光光 貌似是暫存在cell中吃的記憶體太大,導致我還沒匯入完所有照片就掰了 想請大家幫我看看程式碼如何改進比較好,謝謝 -------------------------------------------- p = gcp; poolSize = 8; 略過參數設定、路徑定義、輸出檔名; idx1=1; idx2=2880; f = dir([figpath '*.png']); imagecell= cell(idx2-idx1+1,1); c = 1; for i = idx1:idx2 figname = f(i).name; II = imread([figpath figname]); imagecell{c,1} = II; c=c+1; end v = VideoWriter(gifname); v.FrameRate = 12; %v.Quality = 0; open(v); for k = 1:numel(imagecell) writeVideo(v,imagecell{k,1}); end close(v); movefile([gifname '.avi'],outpath); ------------------------------------------------- 想請問各位前輩哪裡可以優化,我一直想不通總大小約2G的2880張png 怎麼在處理時會吃掉快30 40 G的記憶體,然後就掰了 謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.116.24.214 ※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1495678945.A.82A.html
YoursEver: google: appending image frames to existing avi file 05/25 11:05
YoursEver: 你的圖檔都是2048*2048左右的color image? 05/25 14:09
您好 我的圖檔都是尺寸4096*3072 ※ 編輯: ecogod (140.116.24.214), 05/25/2017 14:50:00
YoursEver: 若是灰階那就一樣大, 4096*3072*1 = 2048*2048*3 05/25 15:11
我輸出彩色的 print('-dpng','-r300',[outpath, 'i' , num2str(i) ]) ※ 編輯: ecogod (140.116.24.214), 05/25/2017 15:19:02
YoursEver: 我不知道你要轉成影片的目的是什麼,如果只是要連續播放 05/25 16:31
YoursEver: 寫個小function連播static image就好. 如果只是單純要 05/25 16:32
YoursEver: 變成單一一個video sequence,那麼拿其他軟體拼湊這2800 05/25 16:32
YoursEver: 張也行.沒必要要求用matlab來處理. 畢竟讀檔之後,存在 05/25 16:33
YoursEver: 記憶體裡面的是影像的raw data,故需2800*4000*3000byte 05/25 16:35
YoursEver: 若堅持用matlab,請試gpuarray,確認能否交給顯卡處理. 05/25 16:39
sunev: 若無暫停,快倒轉需求可考慮gif格式 05/25 18:19
YoursEver: 如果存成gif 89a,假設壓縮率相同,那麼一次要讀一個2GB 05/25 23:37
YoursEver: 的圖檔,也是件容易讓人頭皮發麻的事. XD 05/25 23:38
YoursEver: 不如存成multiple page的TIFF; TIFF的壓縮率比gif89a好 05/25 23:44
YoursEver: 只是TIFF format要自己按next page... =_=; 05/25 23:44
sunev: 不然就不要強求lossless,檔案可以小很多 05/25 23:49
YoursEver: 所以要原po說明一下需求是什麼了,單張影像的大小比4k 05/26 02:47
YoursEver: UHDTV的一張frame還大... orz 05/26 02:48
YoursEver: 但是,站在壓縮率的立場,拿LZW-TIFF或是motion jpeg都不 05/26 02:53
YoursEver: 如直接壓成video sequence; 因此,或許比較簡單的做法是 05/26 02:54
YoursEver: 用matlab的videowriter先寫成數個video,然後再拿其他的 05/26 02:55
YoursEver: 軟體把這些短video合併成一個長video. 05/26 02:55
ecogod: 後來我解決的矩陣的問題,謝謝大家 06/05 17:02
YoursEver: 所以是怎麼解決的呢? 06/06 10:22