前几日给项目在写视频聊天的功能的时候遇到了一个很是奇怪的问题.我是在Backtrack5 也就是(ubuntu10.04)下使用Qt+openCV采集摄像头数据然后编码传输的.刚开始编译完openCV2.3之后是没有问题的,能正常的采集到摄像头数据.但是很奇怪的事情是,当我重启机子之后切换到另外一个系统(windows的系统)之后,再过一段时间再重启,切换回Backtrack5.这个时候我之前写的程序就不能运行了.
期间我除了切换了一次系统,其他什么操作都没有作过,就是一个Backtrack5->win7->Backtrack5这么一个过程我的程序就没有办法运行了,跟踪一看,发现是在这句
IplImage *cvimage = cvQueryFrame(camera);
并没有捕获到数据,
cvimage变成了野指针,之后在使用cvimage的时候便错了
最开始我以为是摄像头的问题没有捕获到数据,换了一个新的,问题依旧.
然后我怀疑是不是USB驱动的问题,但是我插上U盘的时候运行完好....
在命令行下输入lsusb能发现摄像头,但是ls /dev/video0 却显示文件不存在.....这样让我很是怀疑摄像头的
驱动是不是有问题.
继续跟着男人的第六感走,下载了一个法国医生写的驱动,准备编译的时候却百度到另外一篇文章说这个前辈写
的驱动都已经集成到Linux的内核中去了......仔细想一想正常关机也不会关驱动什么事情,不可能关机了驱动
就有问题了....
百般无奈,我只能切换到win7去继续写.......在win7下一切正常. 有句话说难题总是不经意之间便解决了,我脚
贱不小心踢电源线,机子关机趁开机的小空隙我去冲了一杯G7,回来的时候应进到BackTrack5的桌面了.. 没想到
这个时候我运行我的代码,竟然一切都正常了.视频数据能正常显示出来,在终端输入
ls /dev/video0 的时候不再显示找不到文件,而是黄字显示 video0......我认为这一切都是巧合就没有记在心上
今天这个奇怪的问题又出现了....我关机在开机之后原先运行好好的程序又和之前一样了..
这次我切换到XP 直接打开摄像头能正常显示,然后再切换回BackTrack5 OK程序又正常了...嗯看来真不是巧合.
总结如下
当在BackTrack5(Ubuntu10.04)突然摄像头用不了的时候.... 切换到windows下用任何一个程序打开一次摄像头让
它正常显示,然后就可以重启切换到你的ubuntu下继续代码了......
虽然问题是解决了,但是其中的原理我还是不懂,百度谷歌了许久发现类似问题的很多,但是都没有一个明确的答案,
基本是聊着聊着就没有下文了.
期待大牛帮忙解释下