C++
OpenCV

OpenCVのcv::MatをHello, world的に使ってみる

More than 1 year has passed since last update.

画像処理ライブラリOpenCVを使いこなせるようになりたいので、簡単に使ってみました。
OpenCVのc++ライブラリでは、根幹をなすcv::Matという行列クラスがあるので、Hello, World的にそのインスタンスを生成するコードを書いてみました。

今回は手元のMac (バージョン10.11.6、El Capitan) で動かしました。

OpenCVのインストール

brew install opencv

以下のディレクトリにOpenCVがインストールされました。

/usr/local/Cellar/opencv/3.3.1_1

行列を定義し、単位行列と掛け算するコード

以下のようなコードを書き、hellocv.cppとして保存します。

#include <iostream>
#include <opencv2/core/core.hpp>

int main(int argc, char* argv[])
{
    cv::Mat m1 = (cv::Mat_<double>(3, 3) << 0, 1, 2, 3, 4, 5, 6, 7, 8);
    cv::Mat e = cv::Mat::eye(3, 3, CV_64F);
    cv::Mat res = m1 * e;
    std::cout << res << std::endl;

    return 0;
}

このコードで、m1は3 x 3 の正方行列で、各要素はdouble型であり、以下のような値が格納されます。

\left(
\begin{matrix}
0 & 1 & 2 \\
3 & 4 & 5 \\
6 & 7 & 8 
\end{matrix}
\right)

また、eは3 x 3の単位行列です。これもCV_64Fの指定によりdouble型としています。

\left(
\begin{matrix}
1 & 0 & 0 \\
0 & 1 & 0 \\
0 & 0 & 1
\end{matrix}
\right)

resm1eの掛け算なので、m1と同じ結果が返ってきます。

それをコンソールに出力します。

動作確認

ビルドして、動作確認してみます。

以下のように、-I-L-lに適切なパスやファイル名を与えて、必要なインクルードファイルやライブラリファイルが読み込まれるようにしてビルドします。

gcc -I/usr/local/Cellar/opencv/3.3.1_1/include -L/usr/local/Cellar/opencv/3.3.1_1/lib -ohellocv -lopencv_core -lstdc++ hellocv.cpp 

実行してみます。

$ ./hellocv 
[0, 1, 2;
 3, 4, 5;
 6, 7, 8]

期待通り、m1と同じ行列が出力されました。