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幀之後的幀
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/