matlab讀取視頻VideoReader類 mmreader

原文連接http://blog.163.com/yuyang_tech/blog/static/2160500832013989110899/

matlab讀取視頻VideoReader類 

看到以前matlab中讀取視頻多使用mmreader等(參考《matlab讀取/播放視頻的函數》),而現在matlab有一個專門的視頻讀取類VideoReader完成視頻讀取的功能。
相關博文:《matlab寫入/合成視頻VideoWriter類 》
0。 一個讀取視頻,顯示幀,並保存每一幀 的代碼
fileName = 'MVI_1264_clip.avi'; 
obj = VideoReader(fileName);
numFrames = obj.NumberOfFrames;% 幀的總數
 for k = 1 : numFrames% 讀取數據
     frame = read(obj,k);
     imshow(frame);%顯示幀
     imwrite(frame,strcat(num2str(k),'.jpg'),'jpg');% 保存幀
end
下面具體介紹VideoReader類的函數。
1。VideoReader - 該函數用於讀取視頻文件對象。
函數調用格式:
obj = VideoReader(filename)
obj = VideoReader(filename,Name,Value) 
其中obj爲結構體,包括如下成員:
Name - 視頻文件名
Path - 視頻文件路徑
Duration - 視頻的總時長(秒)
FrameRate - 視頻幀速(幀/秒)
NumberOfFrames - 視頻的總幀數
Height - 視頻幀的高度
Width - 視頻幀的寬度
BitsPerPixel - 視頻幀每個像素的數據長度(比特)
VideoFormat - 視頻的類型, 如 'RGB24'.
Tag - 視頻對象的標識符,默認爲空字符串''
Type - 視頻對象的類名,默認爲'VideoReader'.
UserData - Generic field for data of any class that you want to add to the object.  Default: []
如,視頻的總幀數爲numFrames = obj.NumberOfFrames;
在不同的系統平臺下,可以讀取的視頻文件類型如下:
所有系統平臺:AVI (.avi), Motion JPEG 2000 (.mj2)
所有Windows系統:MPEG-1 (.mpg), Windows Media Video (.wmv, .asf, .asx), 和任何Microsoft DirectShow?支持的類型。
Windows 7系統:MPEG-4, 包括 H.264 編碼視頻 (.mp4, .m4v), Apple QuickTime Movie (.mov), 和任何Microsoft Media Foundation支持的類型。
Macintosh系統:MPEG-1 (.mpg), MPEG-4, 包括 H.264 編碼視頻 (.mp4, .m4v), Apple QuickTime Movie (.mov),
和任何在http://support.apple.com/kb/HT3775中列出的QuickTime支持的類型。
Linux系統:Any format supported by your installed plug-ins for GStreamer 0.10 or above, as listed on http://gstreamer.freedesktop.org/documentation/plugins.html, including Ogg Theora (.ogg).
2 該類其他成員函數:
get - 獲取視頻對象的參數
參數的名字爲上述obj對象的所有成員。
調用格式:
Value = get(obj,Name)
Values = get(obj,{Name1,...,NameN})
allValues = get(obj)
get(obj)
如:
xyloObj = VideoReader('xylophone.mpg');
xyloSize = get(xyloObj, {'Height', 'Width', 'NumberOfFrames'})
set - 設置視頻對象的參數,與get對應
調用格式:
set(obj,Name,Value)
set(obj,cellOfNames,cellOfValues)
set(obj,structOfProperties)
settableProperties = set(obj)
 如:
newValues.Tag = 'My Tag';
newValues.UserData = {'My User Data', pi, [1 2 3 4]};
xyloObj = VideoReader('xylophone.mpg');
set(xyloObj, newValues)
set(xyloObj, 'Tag', 'This is my tag.');
getFileFormats - 獲取在該系統平臺下,VideoReader可以支持讀取的視頻類型。
調用格式:
formats = VideoReader.getFileFormats()
isPlatformSupported - 檢測在當前系統平臺下VideoReader是否可用
調用格式:
supported = VideoReader.isPlatformSupported()
read - 讀取視頻幀
調用格式:
video = read(obj),獲取該視頻對象的所有幀
video = read(obj,index),獲取該視頻對象的制定幀
如:
video = read(obj, 1);         % first frame only 獲取第一幀
video = read(obj, [1 10]);    % first 10 frames 獲取前10幀
video = read(obj, Inf);       % last frame only 獲取最後一幀
video = read(obj, [50 Inf]);  % frame 50 thru end 獲取第50幀之後的幀


以下內容鏈接http://blog.163.com/yuyang_tech/blog/static/2160500832013985357941/

matlab讀取/播放視頻的函數

1. 可以用mmreader和 read這兩個函數讀取視頻幀
readerobj = mmreader('xylophone.mpg');
vidFrames = read(readerobj);
具體參數含義幫助文檔裏面有。示例:
fileName = 'ntia_wfall-qcif_original.avi'; % .avi必須是無損壓縮的. 
obj = mmreader(fileName);
vidFrames = read(obj);% 讀取所有的幀數據
numFrames = obj.numberOfFrames;% 幀的總數 for k = 1 : numFrames% 讀取數據     mov(k).cdata = vidFrames(:,:,:,k);% mov(k)是一個結構體,mov(k).cdata實際上就是一個有RGB的幀
     mov(k).colormap = [];
end
movie(mov);% 在matlab中播放視頻

2. 從AVI視頻中提取每一幀,使用 aviinfo,aviread
str='D:\Program Files\MATLAB71\work\1.avi';
info=aviinfo(str);
fum=info.NumFrames;
for i=1:fum
    mov=aviread(str,i);
    I=mov.cdata;
    J=rgb2gray(I);
    imwrite(J,strcat('F:\shiyan\work\',int2str(i),'.bmp'),'bmp');
end

3. Matlab下讀取視頻文件並進行基於鄰幀差法的視頻目標運動檢測(原文

videoObj = mmreader('highwayII_raw.avi');%讀視頻文件
nframes = get(videoObj, 'NumberOfFrames');%獲取視頻文件幀個數

for k = 1 : nframes
    currentFrame = read(videoObj, k);%讀取第i幀
    subplot(1,2,1),imshow(currentFrame);
   
    grayFrame = rgb2gray(currentFrame);%灰度化
    if(k==1)
        grayFrame_1 = grayFrame;
    end
    difgrayFrame= grayFrame - grayFrame_1;%鄰幀差
    grayFrame_1 = grayFrame;
   
    subplot(1,2,2),imshow(difgrayFrame);
end


4. 播放視頻可使用 movie(mov)(使用示例見1中),implay('*.avi')



以下內容鏈接http://blog.163.com/yuyang_tech/blog/static/21605008320139854818157/

matlab讀取/播放視頻的函數  


1. 可以用mmreader和 read這兩個函數讀取視頻幀
readerobj = mmreader('xylophone.mpg');
vidFrames = read(readerobj);
具體參數含義幫助文檔裏面有。示例:
fileName = 'ntia_wfall-qcif_original.avi'; % .avi必須是無損壓縮的. 
obj = mmreader(fileName);
vidFrames = read(obj);% 讀取所有的幀數據
numFrames = obj.numberOfFrames;% 幀的總數 for k = 1 : numFrames% 讀取數據     mov(k).cdata = vidFrames(:,:,:,k);% mov(k)是一個結構體,mov(k).cdata實際上就是一個有RGB的幀
     mov(k).colormap = [];
end
movie(mov);% 在matlab中播放視頻

2. 從AVI視頻中提取每一幀,使用 aviinfo,aviread
str='D:\Program Files\MATLAB71\work\1.avi';
info=aviinfo(str);
fum=info.NumFrames;
for i=1:fum
    mov=aviread(str,i);
    I=mov.cdata;
    J=rgb2gray(I);
    imwrite(J,strcat('F:\shiyan\work\',int2str(i),'.bmp'),'bmp');
end

3. Matlab下讀取視頻文件並進行基於鄰幀差法的視頻目標運動檢測(原文

videoObj = mmreader('highwayII_raw.avi');%讀視頻文件
nframes = get(videoObj, 'NumberOfFrames');%獲取視頻文件幀個數

for k = 1 : nframes
    currentFrame = read(videoObj, k);%讀取第i幀
    subplot(1,2,1),imshow(currentFrame);
   
    grayFrame = rgb2gray(currentFrame);%灰度化
    if(k==1)
        grayFrame_1 = grayFrame;
    end
    difgrayFrame= grayFrame - grayFrame_1;%鄰幀差
    grayFrame_1 = grayFrame;
   
    subplot(1,2,2),imshow(difgrayFrame);
end


4. 播放視頻可使用 movie(mov)(使用示例見1中),implay('*.avi')



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章