Setting up OpenCV C++ for Ubuntu and Raspbian
Ubuntu OSとRaspbian OS上で、OpenCVをC++言語を使用して開発するための環境設定の方法を解説します。
Webカメラの画像を取得し・表示するアプリケーションを例に、設定方法を説明します。
▶ 更新履歴
-
29/05/2014 camera.cppの1394カメラでの動作を確認し、1394カメラでも動作することを追記しました。
1. 必要なパッケージのインストール
開発に必要なソフトウェアを準備します。
OpenCVのインストールは、ここに記載した方法で既に済んでいるものとします。
OpenCV 2.xの間は、最新版を使っても同様の方法で開発環境を設定できると思います。
必要なパッケージはpkg-configだけです。
2. サンプルプログラムのコーディング
動作確認のため、Webカメラか1394(FireWire)カメラの画像を取得してウィンドウに表示するアプリケーションを作成します。
*1394(FireWire)カメラを使用する場合は、インストール時に1394カメラ用の設定を行っている必要があります。
詳しくはここをご覧ください。
2.1 コーディング
任意のエディタでcamera.cppを作成し、そのファイルにコードを記述します。
ここではgeditを使用したコマンドを示します。
3. おわりに
これで、OpenCVをC++言語で開発するための環境設定ができました。
動作確認として、Webカメラもしくは1394カメラから画像を取得しウィンドウに表示するアプリケーションを作成しました。
この取得した画像に処理を加えることで様々な用途に使用することができます。
OpenCVは高度な処理が簡単に使用できますので、色々試して見て下さい。
2.3 プログラムの実行
ビルドに成功したら、カメラを接続しプログラムを実行します。
$ gedit camera.cpp
コードの解説を行います。
-
1-3行目
必要なヘッダファイルをインクルードします。
-
5-6行目
Webカメラでキャプチャする画像のサイズをデファインします。
使用するカメラに合わせて設定して下さい。
-
9-10行目
VideoCaptureのコンストラクタを呼び、フレームのセットを行います。
-
13-16行目
Webカメラに接続できるか確認し、接続できない場合はプログラムを終了します。
-
18行目
キャプチャした画像を表示するウィンドウを設定します。
-
20-31行目
Webカメラの画像をキャプチャし、キー入力があるまで処理を続けます。
-
22-24行目
cv::Mat型という行列を扱う型を定義し、その中にWebカメラでキャプチャした画像を格納します。
キャプチャした画像を先ほど設定したウィンドウに表示させます。
-
25-29行目
キー入力を30 ms待ち、キー入力があった場合はPNG画像を保存しプログラムを終了します。
ほとんどのWebカメラは30 fpsで動作するので、ここで30 ms待ちます。
2.2 ビルド
コードが記入できたら、ビルドします。
$ g++ camera.cpp -o camera `pkg-config opencv --cflags --libs`
$ sudo apt-get install pkg-config
$ pkg-config opencv --cflags
$ pkg-config opencv --libs
pkg-configがインストールできたら、以下のコマンドを入力してディレクトリが見つかるか確認して下さい。
見つからない場合は、正常にインストールできていない可能性があります。
もう一度インストール編を確認して下さい。
-
#include <opencv2/core/core.hpp>
-
#include <opencv2/highgui/highgui.hpp>
-
#include <iostream>
-
-
#define WIDTH 640
-
#define HEIGHT 480
-
int main(int argc, char *argv[])
-
{
-
cv::VideoCapture cap(0);
-
cap.set(CV_CAP_PROP_FRAME_WIDTH, WIDTH);
-
cap.set(CV_CAP_PROP_FRAME_HEIGHT, HEIGHT);
-
-
if(!cap.isOpened())
-
{
-
return -1;
-
}
-
-
cv::namedWindow("Capture", CV_WINDOW_AUTOSIZE|CV_WINDOW_FREERATIO);
-
-
while(1)
-
{
-
cv::Mat frame;
-
cap >> frame;
-
cv::imshow("Capture", frame);
-
-
if(cv::waitKey(30) >= 0)
-
{
-
cv::imwrite("frame.png", frame);
-
break;
-
}
-
}
-
}
作成したcamera.cppに以下のコードを記述します。
$ ./camera
Webカメラもしくは1394カメラから取得された画像がウィンドウに表示されます。
終了するときはキーボードから適当なキーを押して下さい。
すると、画像が保存されプログラムが終了します。
これで動作確認は終了です。
