我想知道如何使用我的摄像头在MATLAB中录制视频。如何从MATLAB摄像头录制视频?
回答
如果你已经知道如何capture a single image from a webcam,那么它应该只是拼接图像汇集成一部电影的问题。您可以使用IM2FRAME将图像文件转换为动画帧,然后您可以使用AVIFILE从帧中创建视频文件。下面的代码的外观:
aviObject = avifile('myVideo.avi'); % Create a new AVI file
for iFrame = 1:100 % Capture 100 frames
% ...
% You would capture a single image I from your webcam here
% ...
F = im2frame(I); % Convert I to a movie frame
aviObject = addframe(aviObject,F); % Add the frame to the AVI file
end
aviObject = close(aviObject); % Close the AVI file
我只是用一个for循环作为一个简单的例子,但您可能需要使用一个MATLAB Timer Object,如果你不是想捕捉图像,并在规定的时间添加到AVI文件间隔。
在这里你可以看到精彩的视频如何捕获和处理来自摄像头的图像,所以记录,应该不难:
http://blogs.mathworks.com/videos/2008/01/18/cool-feature-video-processing-demos/
在我的大学生活我已经做这个项目命名为
Audio/video Recorder & player application based on MATLAB
因为我已经在matlab编程中做了音频记录和视频记录和回放。你可以从here
下载源代码首先构建一个视频输入接口
vid = videoinput('winvideo',1,'RGB24_400x300');
你需要调整的最后一位为你的网络摄像头。为了找到摄像头设备(以及除了其他的东西)的列表使用:
imaqhwinfo
下使第一摄像头为对象
a=imaqhwinfo('winvideo',1)
找到支持的视频格式与列表
a.SupportedFormats
然后您需要确定您的帧速率(更多关于此here):
set(vid,'FramesPerTrigger',100);
start(vid);
wait(vid,Inf);
% Retrieve the frames and timestamps for each frame.
[frames,time] = getdata(vid, get(vid,'FramesAvailable'));
% Calculate frame rate by averaging difference between each frame's timestamp
framerate = mean(1./diff(time))
FrameGrabInterval
属性指定从视频流中存储帧的频率。例如,如果我们将其设置为5,则仅保留5个帧中的1个 - 其他4个帧将被丢弃。使用帧率,确定要如何往往能得到帧
set(vid,'FrameGrabInterval',10);
要确定多少帧总共获取,计算出将在设备的帧速率获取的帧的总数,然后由分FrameGrabInterval。
capturetime = 30;
interval = get(vid,'FrameGrabInterval');
numframes = floor(capturetime * framerate/interval)
您现在准备然而,记录和使用getdata
命令与视频播放(peekdata
也很有帮助),...
如果大量的框架将被收购,它更实用将图像记录到磁盘而不是内存。使用图像采集工具箱,您可以将图像直接记录到AVI文件。我们使用LoggingMode属性来配置它。
set(vid,'LoggingMode','disk');
使用avifile命令创建要登录的AVI文件对象。我们必须指定要使用的文件名以及AVI文件应播放的帧频。然后,将视频输入对象的DiskLogger属性设置为AVI文件。
avi = avifile('timelapsevideo','fps',framerate);
set(vid,'DiskLogger',avi);
开始延时采集,并等待采集完成。请注意,图像采集工具箱在采集时不会捆绑MATLAB®。您可以开始采集并继续在MATLAB中工作。
start(vid);
wait(vid,Inf); % Wait for the capture to complete before continuing.
捕获完成后,检索AVI文件对象,并使用close函数释放与其关联的资源。
avi = get(vid,'DiskLogger');
avi = close(avi);
当你与视频输入对象做,你应该使用删除功能来释放与它相关的硬件资源,并从使用功能明确工作区中删除它。
delete(vid);
clear vid;
的很大一部分,但不是全部,上述的从here绘制。
当您点击start(vid)
时,您可能会注意到在开始获取帧之前存在一点延迟。如果您尝试将视频与某些内容进行同步,这很糟糕。在这种情况下,你会想尝试用trigger工作:对触发器和同步
triggerconfig(vid,'manual');
start(vid); %There'll be a delay here, but nothing is being captured
trigger(vid); %Use this line when you want the capture to start. There should be very little delay.
更多信息为here。
我最近写了一篇关于如何通过向ffmpeg程序发送命令行来记录MATLAB中的同步音频和视频的博客文章。你可以找到更多的here,但下面是一些使用我的电脑上有意义的设置的示例。
dos('ffmpeg -list_devices true -f dshow -i dummy')
dos('ffmpeg -f dshow -list_options true -i video="USB2.0 HD UVC WebCam')
dos('ffmpeg -f dshow -video_size 1280x720 -framerate 30 -audio_buffer_size 80 -i video="USB2.0 HD UVC WebCam":audio="Microphone (Realtek High Definition Audio)" -t 10 -c:v libx264 -preset veryfast -crf 25 test_vid2.mp4');
- 1. 如何用前视摄像头在前置摄像头中录制视频
- 2. Android摄像头视频录制
- 3. 如何从Xamarin.Android的前置摄像头录制视频?
- 4. 如何从前置摄像头录制视频?
- 5. 从网络摄像头录制音频和视频java
- 6. 使用Qt5从USB摄像头录制视频
- 7. MATLAB同时录制多个摄像头
- 8. 如何记录多个源摄像头/ IP摄像头视频流?
- 9. 我想记录摄像头的视频
- 10. 通过设备摄像头录制视频和音频
- 11. 如何在matlab中水平翻转摄像头视频?
- 12. 视频摄像头控制API
- 13. 如何从IP摄像头的iOS的iPad/iPhone拍摄视频
- 14. 使用vb.net摄像头录制视频和捕获图像
- 15. 定制UI摄像头录制视频,但防止保存
- 16. 在使用摄像头录制视频时保存视频和图像序列
- 17. 如何控制摄像头的录像
- 18. 从摄像头流到iPhone的视频
- 19. 从iOS摄像头捕捉视频
- 20. 从多个摄像头写视频
- 21. 从Safari摄像头捕获视频
- 22. 从IP摄像头捕获视频
- 23. AVFoundation - 如何从网络摄像头镜像视频 - Mac OS X
- 24. Vimeo使用摄像机录制视频
- 25. 在Android 2.2的前端摄像头视频录制失败
- 26. 前置摄像头录制的视频不正确
- 27. Android - 录制视频时在前后摄像头之间切换
- 28. 在网页上使用网络摄像头录制视频
- 29. 无法录制网络摄像头视频在谷歌浏览
- 30. 我想通过摄像头录制视频的Android
从这个问题我不清楚,如果你想使用网络摄像机记录你的MATLAB会话(可能不是,但我看到人们这样做)。 [所有视频](http://blogs.mathworks.com/videos)都是用Camtasia制作和编辑的屏幕截图。 – MatlabDoug 2009-10-29 19:07:41