由於我用JMF 在RaspBerry Pi上無法找到WebCam,便想起念書時用過的
OpenCV ,
Google了一下,有前輩們寫出解法,我參考了以下這個連結,安裝好了OpenCV ,
雖然中途有遇到一些問題,也爬文做了些修改,最後成功開啟WebCam,一切安好。
安裝OpenCV 於 Raspberry Pi / Banana Pi
一、首先要安裝一些套件在Pi上,在官方最新版的OS上(1.3.10),
其實有部份都己經存在了。
sudo apt-get install build-essential
sudo apt-get install cmake
sudo apt-get install pkg-config
sudo apt-get install libgtk2.0-dev libgtk2.0
sudo apt-get install zlib1g-dev
sudo apt-get install libpng-dev
sudo apt-get install libjpeg-dev
sudo apt-get install libtiff-dev
sudo apt-get install libavcodec-dev
sudo apt-get install swig
二,下載linux/Mac 版的OpenCV ,本例我是下載2.4.10
http://opencv.org/downloads.html
三、解壓縮
unzip
opencv-2.4.10.zip
四、進入資料夾
cd opencv-2.4.10/
五、建立一個存放編譯後檔案的資料夾
mkdir release
六、進入此資料夾
cd release
七、編譯 (注意 最後二個 .. 指的是上一層目錄 ,並不是省略)
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
sudo apt-get update
make
make這個部份要很久,我等了2~3個小時才編譯到28% ,良心建議在睡前開下去make,
天亮起來就差不多了。
八、安裝
sudo make install
九,編輯bash.bashrc 加入環境變數
sudo nano /etc/bash.bashrc
在文件的最下方加入
PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
按下 Ctrl + O 存檔 ,再按下Ctrl + X 離開編輯。
十、測試一下pkconfig
pkg-config --modversion opencv
如果版本和小弟的相同,應該會出現如下圖中的2.4.10
注意,在modversion前面是 2個減號。
十一、 新增一個 WebCam.cpp
sudo nano WebCam.cpp
程式碼內容如下
#include "opencv2/highgui/highgui.hpp"
using namespace cv;
int main()
{
Mat image;
VideoCapture cap; //capture的宣告
cap.open(0); //0 為預設camera
while(cap.isOpened()) //確認camera能開啓
{
cap>>image; //截取影像到image裡方法
if (!image.empty())
imshow("Webcam live", image);
waitKey(33);//避免CPU負荷,給點delay時間
//實際上一般webcam的framerate差不多33ms
}
return 0;
}
一樣按Ctrl + o存檔,Ctrl+x離開。
接下來要編譯程式
注意一下程式碼中的
if (!image.empty())
imshow("Webcam live", image);
在網上找到的範例中並沒有
if (!image.empty()) ,在我的桌機上是正常的,
但在Pi上沒加會爆掉,這行作用是限制讀到的影像不是空的才顯示出來。
十二、編譯程式碼
g++ `pkg-config --cflags --libs opencv` WebCam.cpp -o WebCam
注意,並沒有打錯,真的是有
' 沒錯 ,'是在~(毛毛蟲鍵)
十三,執行程式
./WebCam
十四、 錯誤排解
我在編譯時有發生以下錯誤
./WebCam: error while loading shared libraries: libopencv_gpu.so.2.4: cannot open shared object file: No such file or directory
參考網路上的解法
sudo ldconfig -v
dconfig命令的大概作用是讀取指定文件夾裡的所有庫文件,並根據庫文件中包含的庫文件名為其創建軟鏈接文件。
十五、執行結果
十八、相關知識
pkg-config 命令是可以用來讀取安裝在 linux 系統上的 library 相關資訊。這個程式主要讀取系統中位於 /usr/lib/pkgconfig 目錄或是環境變數 PKG_CONFIG_PATH 所設定的路徑中的副檔名為 .pc 的檔案,
這些檔案包含系統安裝的 library 的相關資訊,包括:安裝的目錄、程式編譯的參數等等。
我們在編譯程式碼中用的指令
g++ `pkg-config --cflags --libs opencv` WebCam.cpp -o WebCam
當中的 `pkg-config --cflags --libs opencv` 其實意思相當於下圖中的一串長長的
20150118補充,有時候可能會遇到
HIGHGUI ERROR: V4L/V4L2: VIDIOC_S_CROP
HIGHGUI ERROR: V4L/V4L2: VIDIOC_S_CROP
OpenCV Error: Unspecified error (The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Carbon support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script) in cvShowImage, file /home/pi/opencv-2.4.10/modules/highgui/src/window.cpp, line 50
這時候建議確認 libgtk2.0-dev 以及 libgtk2.0是否有裝好,如果沒有安裝正確,安裝完重新
由(四 )開始 ,由於不是全部重新make ,所以速度會較前一次省很多。如果缺少的lib不
多,可能只要原本的1/10時間。