OpenCVに触れてみる その1
以前インストールしていたOpenCVですが、その後全く触らなくなっていました。
動画や画像を扱いたくなったため、もう一度試してみることにしました。
Xcodeでプロジェクトの作成とライブラリの追加
新規プロジェクトを、OS X>Command Line Toolを選択し、言語はC++にして作成。
(Pythonの方が扱いやすいとのことですが、後々C#やObjective-Cと組み合わせたいこともあってC++を選択)ナビゲーターエリアのプロジェクト名をクリック>TARGETSでターゲット名をクリックして、Build Settingsタブで、ビルド時に使用するファイルのパスを設定します。
Search Paths>Header Search Path
/opt/local/includeSearch Paths>Library Searh Path
/opt/local/libBuild Phasesタブを開いて、[Link Binary With Libraries]に以下を追加します
(ファイルは[/opt/local/lib]にあります)。
libopencv_core.2.4.8.dylib libopencv_highgui.2.4.8.dylib
※[2.4.8]の部分はバージョンによって異なります。
また、以下の参考サイトでは[libopencv_imgproc.2.4.7.dylib]も追加していますが、私が今回作成したプログラムを動かすだけなら追加しなくても良さそうです。
【参考】
【OpenCV】OpenCV2.4.7をMacにインストールしてサンプルを動かしてみる - キリンを召還するブログ。
プロジェクトを実行する場所を指定する
動画ファイルをロードするにあたって、ファイルのパスを相対パスで記述するとファイルが見つからずエラーになります。
そこで、実行するパスを指定してやることでその場所からの相対パスを使用可能にします。
再生ボタンや停止ボタンの右側、Active Scheme(デフォルトでターゲット名が表示されていると思います)をクリック>Edit Scheme
左側でRun (ターゲット名)を選択して、[Working Directory]でテキストボックスにパスを指定します(プロジェクト直下にしました)。
【参考】
動画ファイルを読み込んで表示してみる
とりあえず動画ファイルを読み込んで、ウインドウで表示して再生するプログラムを作ってみました。
https://github.com/masanori840816/OpenCvTest
viewMovie.h
#include < opencv2/opencv.hpp >
class ViewMovie{
public:
int viewMovies();
std::string strFileName = "files/mouse.mp4";
};
includeでopencv2を読み込んでいるのと、動画ファイルのパスを指定しています。
viewMovie.cpp
#include "viewMovie.h"
int ViewMovie::viewMovies(){
cv::VideoCapture vdcCapture(strFileName);
// ファイルが見つからなければエラー
if(!vdcCapture.isOpened()){
return -1;
}
cv::namedWindow("Movies", CV_WINDOW_AUTOSIZE|CV_WINDOW_FREERATIO);
while(1) {
cv::Mat matFrame;
vdcCapture >> matFrame;
// 再生が終了したら閉じる
if(matFrame.empty()){
break;
}
// ウインドウに映像を表示する
cv::imshow("Movies", matFrame);
// Escapeキー押下で閉じる
if(cv::waitKey(10) == 27){
break;
}
}
return 0;
}
vdcCaptureで読み込んだ動画をウィンドウに表示しています。
再生が終了すると、[imshow]で表示する内容が無くなりエラーが発生するため、[matFrame.empty()]でチェックしています。
【参考】
[動画ファイルの読み込み]
入出力とGUI - OpenCV-CookBook
[WaitKeyについて]
OpenCVでウィンドウを作成した後、その中に画像を表示する - オープンソースの誘惑
とりあえず動きはしたので、明日からは表示した映像をいじってみたいと思います。