matlab-基于IBM服务器”VideoReader没有注册类“解决全过程

来源:互联网 发布:域名地址解析 编辑:程序博客网 时间:2024/06/01 23:15

额……之前有点懒,遇到问题,解决了就解决了,很少想着去写篇博客什么的,总觉得浪费时间,后来慢慢发现有些问题,遇到了,解决了,会了,久了,忘了,然后又遇到了……如此周而复始,网上搜索,并非所有的案例都一样,总是又要折腾一大番功夫方可解决,影响心情甚至无果告终……

今天,matlab自带命令VideoReader只因换到了服务器上运行,同一个版本竟然通不过这样一个从没想过的问题,竟然难倒了我,让一切后续实验无法进展,各种搜索各种捯饬折腾了一下午到现在,基本算是解决了,实验可以继续。刚拿起笔记本打算记录的同时,思定还是写这么篇小博客,一来留作回忆,二来为日后其他跟我类似案例的人一个分享,这样无足小事实在不值得大家再去耗费精力去琢磨。

Ok,切入正题。

最近做视频处理小实验,教研室电脑配置一般,MATLAB  R2013a,实验用的是拿单反相机录的视频,分辨率比较高,做实验的时候总是会出现out of memory,为了快速实验,把整个流程走通,我先读入10帧图像做处理,OK,通过,于是想在服务器上看看算法效果,Windows Serve 2008服务器具体型号什么的不太记得了,MATLAB 同样是2013a,结果调试的过程中,一开始就错了,错误原因:VideoReader没有注册类!我再次看了我电脑上的matlab版本和服务器上的matlab版本,完全一致。OK,不是版本问题。那么没有注册类是什么意思呢?网上各种搜索,资源不是很多但是回答的也都很有道理,个人页觉得可能是服务器缺少什么组件,那么到底是缺少什么组件呢?有人说是"Desktop User Experience"的问题,于是各种搜索查这是个什么东西,怎么解决,终于找到了个类似的比着做:进入服务器管理器给服务器安装了一系列与用户体验有关的小功能,重启测试,还是报错,只是错误原因变了:内部资源初始化错误(大致意思,原英文具体不记得了)。看来有戏,然后突发奇想,是不是编解码的问题(曾经遇到过类似问题),于是网上搜了,也有人说matlab自己不编解码,需要借助外部工具来做,我们的电脑上可能都早已被我们不经意间补上了,而服务器并不一定。于是,搜搜索了目前所读取的视频mov格式的编解码器,搜索下载了一个安装好,果然被我撞上了,VideoReader通过没问题,但是新的问题又来了“Unable to determine the number of frames in this file”,什么鬼?无法读出该视频文件有多少帧吗?没有帧数怎么行!继续搜,按照有网友的说法,更改编解码器中AVI和MOV的分离器,试了,无果……还有网友分享说,转换个角度,读取视频的最后一帧,然后再获取视频帧数可以治标,这个亲测可用,程序通过但是有警告。


文章写得过于随心,不想看Jojo唠叨的,直接略过只看以下部分即可:

1、VideoReader没有注册类

解决方案:仿照 http://cn.mathworks.com/matlabcentral/answers/57248-error-loading-a-vide-file-using-videoreader和https://technet.microsoft.com/en-us/library/cc754314.aspx上边的建议,进入服务器管理模块安装对应功能;


2、内部资源初始化错误(当时没截图,这是我大致翻译的额……)

解决方案:安装mov codec(我个人当时读入的视频是mov文件,其他视频文件可能编解码器略微不同)


3、Warning: Unable to determine the number of frames in this file.

解决方案: vObj = VideoReader('2.mov'); 读入视频,然后读取最后一帧:lastFrame = read(vObj,inf);然后再获取视频帧数nFrames = vObj.NumberOfFrames;程序通过,但有警告。


折腾了这么久还没有试出更好的解决方案,如果正在看博文的你,有更好的解决方案,请不要吝啬留言告诉Jojo哦~ 给Jojo学习下,也给后来者一些见识,少走弯路,潜心研究哈~不胜感激!

0 0