matlab读取/播放视频的函数(2)
生活随笔
收集整理的這篇文章主要介紹了
matlab读取/播放视频的函数(2)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、用matlab讀取avi 視頻(只能讀一定壓縮各式的avi 電影,這是因為avi視頻文件的編碼
有很多,而matlab只支持部分編碼格式。可見
http://blog.csdn.net/IdoIwill/article/details/2125838) aviinfo('d:\abc.avi'); ?
%顯示存在d 盤文件abc.avi 的信息,在matlab2010 版本中,該函數可以換成mmreader mov=aviread('abc:.avi'); ??%讀入電影abc.avi movie(mov); ????????????%放映電影 ?
2、將avi視頻轉成圖片序列?
mov=aviread('d:\abc.avi'); %讀入?
Vframes=size(mov,2); ??%讀取視頻的幀數,mov 為1*1179 struct,struct就是第4點所介紹的 for i=1: Vframes?
strtemp=strcat('d:\轉換的圖片\',int2str(i),'.','jpg'); %將每幀轉成.jpg 的圖片 imwrite(mov(i).cdata(:,:,), mov(i).colormap, strtemp); ?% 把圖像寫入磁盤 end ?
3、讀取avi視頻第index幀有三種使用方式(不適用于索引圖):?
第一種:mov=aviread(filename); ??% 讀入視頻?
frame=mov(index); ??????%讀取avi 文件的第index 幀圖像; img = frame.cdata; ???????% 讀取圖像的顏色信息?
第二種:frame = aviread(filename, index); ?????????img = frame.cdata;?
第三種:mov = aviread(filename); ????????frame = mov.cdata; ????????img = mov{index}; 例:%讀取第一幀圖像?
mov = aviread('highwayI_raw.AVI'); frame=mov(index); imshow(frame.cdata); ??
4、讀取avi視頻第index幀圖像后,所儲存幀格式是一個結構體(struct),該結構體有兩個元素:cdata 和colormap?
例:?
frame = aviread('highwayI_raw.AVI', i);?
frame.cdata 表示了一個數據數組,彩色圖像就是3 維的,灰度圖像就是2 維的。也就是相當于I=imread(‘abc.jpg’)后的數組I?
frame.colormap 見(help aviread)?
%%%%%了解了以上四點,處理視頻文件就可以相當于圖像文件一樣處理了%%%%?
5、將彩色圖像轉換為灰度圖像,很簡單:? frame = aviread('highwayI_raw.AVI', i);? f_gray = rgb2gray(frame.cdata); 這樣就可以將文件的第i幀轉換為灰度圖像。 ? 6、 創建avi視頻文件? aviobj = avifile(filename)? aviobj = avifile(filename, 'Param1', Val1, 'Param2', Val2,...) 描述:? aviobj = avifile(filename) 創建一個AVI文件,其名稱為filename,AVI文件對象的所有屬性均取默認值。如果文件名中并不包含擴展名,則avifile為filename自動添加擴展名.avi。AVI是一種存儲聲音和圖像數據的文件格式。? avifile返回一個指向AVI文件對象aviobj的句柄,使用該對象在其他函數中可以引用該對象。AVI文件對象支持控制被創建的AVI文件的各方面屬性和方法。? aviobj = avifile(filename, 'Param1', Val1, 'Param2', Val2,...)使用指定的參數設置創建一個AVI文件。 參數說明表:
用戶也可以使用結構語法來設置AVI對象的屬性。Avifile對象的所有屬性名字和參數表中的名字一樣,并且要完整(除了keyframe這個參數)。例如,設定質量屬性為100可以使用如下的語法 格式:? aviobj = avifile('myavifile'); aviobj.quality = 100; ? 實例? 這一實例顯示如何使用函數avifile創建AVI文件example.avi。 t = linspace(0,2.5*pi,40); fact = 10*sin(t); fig=figure;? aviobj = avifile('example.avi') [x,y,z] = peaks; for k=1:length(fact) h = surf(x,y,fact(k)*z); axis([-3 3 -3 3 -80 80]) axis off? caxis([-90 90]) F = getframe(fig);? aviobj = addframe(aviobj,F); end? close(fig)? aviobj = close(aviobj); ? 7、mmreader 類---創建一個視頻文件讀取對象? 其實在 matlab2010 中,會建議采用mmreader、mmfileinfo等函數,如果使用aviread會出現警告如下:? Warning: AVIREAD will be removed in a future release. Use MMREADER instead. ?這是由于aviread接口需要要求avi文件時沒有壓縮的,這回導致其應用受到很大的 具體的mmreader 類描述可見matlab的help,以下摘自一些重點: ?mmreader類 是為了創建一個讀取視頻文件的多媒體讀取對象 描述:? 函數 mmreader可以讀取所有的多媒體文件,返回值為一個結構體;然后可以用read 函數進行讀取文件? mmreader 支持的文件格式由各個操作系統平臺決定? Window: AVI(.avi)/MPEG-1(.mgp)Window Media Video(.wmv,.asf,.asx)? Macintosh: AVI(.avi)/MPEG-1(.mpg)/MPEG(.mp4,.m4v)/蘋果Quick Time movie(.mov) ?????????????以及被QuickTime在蘋果系統上所支持的視頻格式? Linux: ?支持系統中所安裝的GStreamer 0.10 支持的視頻格式,包括AVI/Ogg Theora(.ogg) ? mmreader創建視頻文件有兩種 obj = mmreader(filename);? obj = mmreader(filename, ‘PropertyName’, ‘PropertyValue’);? 第一種只需提供(默認路徑名)+文件名,就可以返回一個視頻對象;使用第二種方法,可以設置屬性名以及屬性值 obj具有的屬性如下: ?BitsPerPixel ?(只讀) ??視頻的每個像素的位數 ? Duration ????(只讀) ??每秒的總長度? ?FrameRate ??(只讀) ??每秒的幀率? ?Height ??????(只讀) ?視頻每幀圖像的高度? ?Name ???????(只讀) ?對象所對應的視頻文件名? ?NumberOfFrames (只讀) 視頻流中的總幀數? ?Path ???????????(只讀)視頻文件所在的路徑名? ?Tag ?????????????????定義視頻對象的標簽(默認’’) ? Type ???????????(只讀) 對象的類名—mmreader ??UserData ??????????????給用戶自定義數據的區域? ?VideoFormat ????(只讀) 視頻文件壓縮格式? ?Width ??????????(只讀)視頻每幀圖像的寬度 通常obj對象配合read方法使用; read的使用方法如下: video = read(obj);? video = read(obj,index); 或 video = read(obj, [index1,index2])? 其實第一種默認是read(obj, [1,inf]) 第一種方法讀入obj視頻對象的所有幀; 第二種方法讀入obj視頻對象的第index幀.? 第一種方法返回的video對象是個4維數組,H-W-B-F H: 圖像幀的高度 W: 圖像幀的寬度 B: 圖像幀的顏色通道 F: 圖像幀的數目? 第二種方法返回就是圖像幀的數據,灰度圖像返回二維數組,RGB24圖像返回三維數組。 讀取第一幀圖像例子如下? obj = mmreader('abc.avi'); video = read(obj); img = video(:,:,:1); imshow(img);
用戶也可以使用結構語法來設置AVI對象的屬性。Avifile對象的所有屬性名字和參數表中的名字一樣,并且要完整(除了keyframe這個參數)。例如,設定質量屬性為100可以使用如下的語法 格式:? aviobj = avifile('myavifile'); aviobj.quality = 100; ? 實例? 這一實例顯示如何使用函數avifile創建AVI文件example.avi。 t = linspace(0,2.5*pi,40); fact = 10*sin(t); fig=figure;? aviobj = avifile('example.avi') [x,y,z] = peaks; for k=1:length(fact) h = surf(x,y,fact(k)*z); axis([-3 3 -3 3 -80 80]) axis off? caxis([-90 90]) F = getframe(fig);? aviobj = addframe(aviobj,F); end? close(fig)? aviobj = close(aviobj); ? 7、mmreader 類---創建一個視頻文件讀取對象? 其實在 matlab2010 中,會建議采用mmreader、mmfileinfo等函數,如果使用aviread會出現警告如下:? Warning: AVIREAD will be removed in a future release. Use MMREADER instead. ?這是由于aviread接口需要要求avi文件時沒有壓縮的,這回導致其應用受到很大的 具體的mmreader 類描述可見matlab的help,以下摘自一些重點: ?mmreader類 是為了創建一個讀取視頻文件的多媒體讀取對象 描述:? 函數 mmreader可以讀取所有的多媒體文件,返回值為一個結構體;然后可以用read 函數進行讀取文件? mmreader 支持的文件格式由各個操作系統平臺決定? Window: AVI(.avi)/MPEG-1(.mgp)Window Media Video(.wmv,.asf,.asx)? Macintosh: AVI(.avi)/MPEG-1(.mpg)/MPEG(.mp4,.m4v)/蘋果Quick Time movie(.mov) ?????????????以及被QuickTime在蘋果系統上所支持的視頻格式? Linux: ?支持系統中所安裝的GStreamer 0.10 支持的視頻格式,包括AVI/Ogg Theora(.ogg) ? mmreader創建視頻文件有兩種 obj = mmreader(filename);? obj = mmreader(filename, ‘PropertyName’, ‘PropertyValue’);? 第一種只需提供(默認路徑名)+文件名,就可以返回一個視頻對象;使用第二種方法,可以設置屬性名以及屬性值 obj具有的屬性如下: ?BitsPerPixel ?(只讀) ??視頻的每個像素的位數 ? Duration ????(只讀) ??每秒的總長度? ?FrameRate ??(只讀) ??每秒的幀率? ?Height ??????(只讀) ?視頻每幀圖像的高度? ?Name ???????(只讀) ?對象所對應的視頻文件名? ?NumberOfFrames (只讀) 視頻流中的總幀數? ?Path ???????????(只讀)視頻文件所在的路徑名? ?Tag ?????????????????定義視頻對象的標簽(默認’’) ? Type ???????????(只讀) 對象的類名—mmreader ??UserData ??????????????給用戶自定義數據的區域? ?VideoFormat ????(只讀) 視頻文件壓縮格式? ?Width ??????????(只讀)視頻每幀圖像的寬度 通常obj對象配合read方法使用; read的使用方法如下: video = read(obj);? video = read(obj,index); 或 video = read(obj, [index1,index2])? 其實第一種默認是read(obj, [1,inf]) 第一種方法讀入obj視頻對象的所有幀; 第二種方法讀入obj視頻對象的第index幀.? 第一種方法返回的video對象是個4維數組,H-W-B-F H: 圖像幀的高度 W: 圖像幀的寬度 B: 圖像幀的顏色通道 F: 圖像幀的數目? 第二種方法返回就是圖像幀的數據,灰度圖像返回二維數組,RGB24圖像返回三維數組。 讀取第一幀圖像例子如下? obj = mmreader('abc.avi'); video = read(obj); img = video(:,:,:1); imshow(img);
總結
以上是生活随笔為你收集整理的matlab读取/播放视频的函数(2)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab读取/播放视频的函数(1)
- 下一篇: MATLAB-fminsearch函数的