虛擬機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】問題而生