虚拟机Ubuntu打开摄像头失败及OpenCV打开摄像头超时的问题
转载来自:https://blog.csdn.net/qq_30155503/article/details/79460420
平台版本:Ubuntu 14.04 + Opencv 3.4.0
最近着手用opencv实现人脸识别,遇到一些问题:在虚拟机Ubuntu上安装好opencv库后,编译官方自带的示例samples/cpp/example_cmake成功,运行竟然失败!!!
错误输出:
Built with OpenCV 3.4.0
Capture is opened
select timeout
select timeout
OpenCV Error: Assertion failed (total() == 0 || data != __null) in Mat, file /root/library/opencv/opencv-3.4.0/modules/core/include/opencv2/core/mat.inl.hpp, line 500
terminate called after throwing an instance of 'cv::Exception'
what(): /root/library/opencv/opencv-3.4.0/modules/core/include/opencv2/core/mat.inl.hpp:500: error: (-215) total() == 0 || data != __null in function Mat
已放弃 (核心已转储)
打开摄像头超时!!!
这究竟是什么原因呢?
首先,当然是百度一下,竟然找不到解决方法。算了,还是靠自己好。
问题的出现,一般不会因为代码问题,毕竟是官方给出来的示例啊,有足够的理由相信它是靠谱的。
那可能是:库的安装问题?摄像头问题?其他???
若是库问题的话,自行找个简单可靠的HelloWorld程序来测试下。
这里我直接预言,是摄像头问题!
一、虚拟机Ubuntu检测摄像头是否已正常插入
插上USB摄像头,在/dev下并未发现有video设备?是因为摄像头连接在了主机上,而非虚拟机。因此,需要将设备移到虚拟机上。
虚拟机连接摄像头:
“虚拟机(M) -> 可移动设备(D) -> Logitech USB Camera -> 连接(断开与主机的连接)”
即可发现 /dev下有了 video0 设备。
二、虚拟机Ubuntu上打开摄像头
Ubuntu上如何打开摄像头?这里需要安装一个软件“cheese”。
1、安装“cheese”,打开摄像头
“cheese”是一个使用摄像头进行拍照和摄像,并可以使用一些花哨的特效,可以让你与他人分享你的乐趣。
安装: $ sudo apt-get install cheese
运行: $ cheese
发现摄像头灯亮了,但画面黑黑一片(等待一段时间或会出现不完整图像,并且卡住不动)
Ubuntu打开摄像头失败,难怪opencv打开摄像头会超时。问题应该就出现在这里!!!
这个问题,百度能找到解决办法。
2、设置虚拟机,成功打开摄像头
在虚拟机上打开 “虚拟机(M) -> 设置(S)”
点击“USB控制器”,更换“USB兼容性(C)”:若是USB 2.0 则换成USB 3.0,若是USB 3.0 则换成USB 2.0。
设置完成后虚拟机会自动重启。
3、再次运行“cheese”打开摄像头
首先断开虚拟机的摄像头,再重新连接。(操作见上)
运行cheese,结果如图:
成功打开摄像头!
三、OpenCV打开摄像头
回到 samples/cpp/example_cmake 下,
编译运行:
$ cmake . & make & ./samples/cpp/example_cmake
搞定,收工!
备注:此博客专为解决【Ubuntu14.04安装Opencv3.4.0】问题而生