各种不给力的流水账-关于写视频文件[2011.6.5]

博主在Mac OS X下尝试使用OpenCV进行视频文件写入,遇到cvWriteFrame()函数报错。尝试了不同的解决方案,包括使用DShow、videoInput库,最终在Windows 7环境下解决了问题。然而,将程序返回Mac时,视频文件仍无法正确写入。文章详述了整个调试过程和遇到的技术难点。
摘要由CSDN通过智能技术生成

不去实验室的日子就木有网可以上啊 ,所以日志只能写在本地,联网了再发。

   

    来实验室已经8天了,第一二两天一直努力在mac os x下装opencv,搜了下说用macports装比较方便,但恰恰是这个macports浪费了我两天还没搞定。装完总是无法连接到更新的站点,所以也装不了opencv。坑爹。

    忍不住下了opencv,自己手动编译,结果,一小时以内就搞定了,可能只有半小时吧。装完运行了一个显示图片的程序,成功。

    然后半贴半改了一个摄像头捕捉并显示,然后模拟拍照的,按键的时候把图片保存下来的一个程序,也成功了。So nice

    然后又写了个将视频数据写入avi文件的程序,结果失败,cvWriteFrame()函数处报错,然后改成用图片作为一帧写入,依旧这个问题。write有个类型的参数,设为-1理应跳出选择框,反正我试了n多参数都什么反应也木有,就是错啊错啊错。(后来才晓得-1windows下面用的,mac当然木有反应。)

    后来又看到viedoInput那个第三方的库,据说用DShow驱动所以效率比较高,然后,毕设折腾nDShow的我再次抽了,木有反应到这个是windows的东东,居然试图在mac下跑,有错误我还一个个排查,一个个改,终于看到windows.h这个头文件的时候,我,放弃了,而且终于意识到了我的NC

    话说这个时候我还是挺怀念DShow的,当初觉得好纠结,但是写好了发现至少捕捉+写文件很方便,不过也许等我学会opencv的时候也会觉得简单了。反正我第一眼看到opencv的时候觉得哇好方便,居然几个函数就好了,哪像DShow这么麻烦,可惜那几个函数不给力啊,要不然真的很简单。

    继续折腾那个写的函数好几天未果,终于前天果断删掉被毕设搞的面目全非的xp,装了win7,然后又装软件装了好久,NC地装上了vs2010,又装了opencv以后发现再次悲剧。显示图片的程序成功,接着直接试cvWriteFrame()。程序是mac下面拷过来的,是那个用图片写入avi的。结果,-1那个框倒是有了,但依旧这个函数错误 。错误信息是kernal.dll,搜了下貌似都是win7下面的错。想死的心都有了。总共就几行代码,没道理这么折腾啊。

    各种搜索各种不给力,无奈求助学姐,学姐又找来学长甲,折腾半天发现换成具体的编码方式就不会报dll错,但是这个函数依然写不了,会有内存错误。学长甲用了个c++封装的函数写了居然就可以,换回c版的依旧报错。我都想买豆腐去了。。。

    中午吃完饭,恰好boss来实验室,无奈下求助bossboss听我说完召唤了学长乙,让学长乙帮我搞定,自己潇洒的走了。学长乙看了半天觉着不是代码的问题,但表示他们平时都是用c++版本的函数,写着方便。随后各种组合,就是c++c的函数混着用,终于发现cvWriteFrame()还是可以用滴。不过前面一小段载入图像的要改。后来我自己再缩小范围,发现是cv::imread()读图片就可以,而cvLoadImage()就不行。虽然我还是不知道为什么。

    这个问题就先放着,然后尝试摄像头采集然后写文件。但,不幸的是,mac下面那个可以运行的模拟拍照的那个程序居然失败,窗口出现的始终是一片灰色,纯色。Orzgoogle之。据说$(OpenCV Folder)/modules/highgui/src/precomp.hpp#if !defined WIN32 && !defined _WIN32#include "cvconfig.h"#elsevoid  FillBitmapInfo( BITMAPINFO* bmi, int width, int height, int bpp, int origin );#endif 改成#include "cvconfig.h"#if defined WIN32 || defined _WIN32void  FillBitmapInfo( BITMAPINFO* bmi, int width, int height, int bpp, int origin );#endif就可以了。但,对我无效。后来发现我电脑里面木有cvconfig.h,网上说那个可能是cmake搞出来的一个文件,反正我win7下面是自动装的那种,不是用cmake的。

    拖videoInput的过来跑了下,居然这个可以用。搜了下貌似mac的摄像头比较纠结,据说装VFW的驱动就可以,如果是DShow的驱动就不能用cv里面那个函数,要用videoInput的。

    好吧,我也不打算换驱动,反正videoInput效率比较高,先用着吧。

    写了下,终于实现了摄像头采集写视频文件了,诶,一波n折啊。总算这么多天也有个安慰。

    顺便网上又买了一本opengl的书,鸭梨山大啊。还没想好明天做什么,反正争取把基本函数先用用,然后看看算法啥的。这个估计要好久了。诶。学无止境呐。

 

总结:装东西的应该不能算在里面,虽然耗费了我大部分时间。其他主要就是用了载入图像、显示图像、写视频文件、摄像头捕捉。

 

Update :早上把那个图片写入视频文件成功的程序放到mac下跑,居然没报错,视频文件也又8kb,创建的时候是4kb,说明有东西写进去了,但打开却仍然木有东西,时间为0。然后又改成opencv自带那个摄像头的函数,结果视频文件仍然8k,看不到东西,但如果把写入的函数去掉,就是只创建不写入的话是4k。这两次都是没有报错的,程序正常结束。诶,纠结。

——11.6.6

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值