2014-05-22 25 views
0

我試圖製作一個函數,該函數需要在電影(.AVI)中生成一系列圖像(.TIF)。包含從.AVI生成TIFF文件的函數

我知道我可以在命令行中使用:

obj = VideoReader('movie.m'); 
vid = read(obj); 
frames = obj.NumberOfFrames; 
for x = 1 : frames 
    imwrite(vid(:,:,:,x),strcat('frame-',num2str(x),'.tif')); 
end 

如何使之成爲其輸入電影產生了一系列TIF圖像的功能?

例如,我有一個函數,在執行時,會在當前文件夾中生成「movie.avi」。我想要一個功能avitotif(movie.avi),它需要movie.avi並製作一系列的tif圖像。

謝謝

+0

我不明白你的問題,你有什麼改變?寫作時你想讀一個AVI嗎? – Daniel

+0

@Daniel我想創建一個輸入avi文件目錄並生成一系列tif圖像的函數。 例如,我有一個函數makemovie(x,y),它用一個時間帶入一個粒子的x和y座標,並製作一個運動粒子的電影。運行這個功能會給我一個保存在當前文件夾中的電影。我想要另一個功能,需要該電影,並在同一個文件夾中製作一系列tif圖像。 –

回答

0

有你需要的,如果你想將它轉換成一個函數做兩件事情:

  1. 包裝這個代碼用一個函數頭,併爲輸入指定一個參數:視頻存儲位置的路徑。我們稱之爲輸入pathToMovie
  2. 更改函數標頭後代碼的第一行,以便它從輸入中獲取字符串。

當你完成後,該文件保存爲avitotif.m,設置你的工作目錄是哪裏這個文件所在,然後運行avitotif('movie.avi');假設AVI文件也是在同一目錄。

下面是代碼的樣子:

function [] = avitotif(pathToMovie) 
obj = VideoReader(pathToMovie); 
vid = read(obj); 
frames = obj.NumberOfFrames; 
for x = 1 : frames 
    imwrite(vid(:,:,:,x),strcat('frame-',num2str(x),'.tif')); 
end 

現在繼續撥打avitotif('movie.avi');

+0

@ user3590969:你夠久了呃!?開玩笑。謝謝你接受我的回答:) – rayryeng

+0

對不起!再次感謝!還有一個問題,如果你不介意的話。在電影的路徑中,如果它只是當前的工作文件夾,我該如何編寫它?這只是'pwd'嗎? 再次感謝 –

+0

如果它是當前的工作目錄,則不需要執行'pwd'。相對文件名假定當前工作目錄已經存在。因此你不需要指定它。如果你做過'avitotif('movie.avi');',那麼它就會在當前工作目錄中查找'movie.avi'。但是,FWIW,是的,命令是'pwd'來獲取當前的工作目錄 – rayryeng

相關問題