OpenCVをインストールしたあとにサンプルを動かすまで(手戻りあり)

先日インストールしたOpenCVですが,実際にサンプルを動かすところにまではいたらなかったので,その続きをやりました.
C++サンプルフォルダの中にあった,エッジ検出プログラム(edge.cpp)をコンパイルして動かすところまでできました.
ここまでできれば,あとはAPIなど見ながら学習に専念できるはず.

一口にやりましたとは言ったものの,いくつかつまづきポイントがありました.

Makefile

コンパイルをする際にヘッダの読み込みやライブラリのリンクが必要になるので,Makefileに記述を追加しました.
(もととなるMakefileは,"Makefile 書き方"で検索しててきとうにつくりました.)

CXXFLAGS = `pkg-config opencv --cflags`
LDFLAGS = `pkg-config opencv --libs`

上の行が,OpenCVのインクルードヘッダなどの情報をまとめて設定してくれるコマンドで,
下の行はライブラリの設定をしてくれるコマンドです.
ちなみに ` はバッククオート(Shift+@)で,``で囲まれた部分をコマンドとして実行するものです.
実際に``の中身をシェルで実行すると,フォルダのパス情報などが出力されます.

これはもちろん, pkg-config がインストールされていないと使えないコマンドなので,ない場合はインストールします.

sudo apt-get install pkg-config

そして$(CXXFLAGS),$(LDFLAGS)あたりをコンパイル設定に加えて,コンパイル.
とりあえず通りました.

PATHを通す

さっそく実行してみると,こんなエラーがでました.

  • ./sample: error while loading shared libraries: libopencv_core.so.2.3: cannot open shared object file: No such file or directory

引数なしで実行したので,使い方が表示されるのを期待しましたが,それ以前の問題のようです.

soファイルが見つからないといわれました.
インストール先にないのかと思ったら,そこにはちゃんとファイルがあって,インストール先にパスを通し忘れていることが原因でした.

というわけで,次の記述.

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

(毎回やるのは面倒なので,${HOME}/.bashrc に直接書いてしまいました.)

これで,/usr/local/lib にインストールされたOpenCVを参照しにいけるようになりました.

GTK2.0-devのインストール

さて,もう動くだろうと思って,サンプルフォルダからコピーしてきた画像とともに実行しました.

エラーがでました.

どうやら実行結果をウインドウ表示しようとしてエラー終了しているようです.
詳しい内容はログをとっていなかったので忘れてしまいましたが,"libgtk2.0-dev is not implemented. install it."的なことが書いてあった気がします.

sudo apt-get install libgtk2.0-dev

気づくのが非常におそかったのですが,GTKが入っている状態でOpenCVを make install しないといけないですね.
以下,前回のおさらいなので早送り.

cd lib-opencv-latest
cmake -DCMAKE_BUILD_TYPE=RELEASE -DWITH_CUDA=OFF .
make
sudo make install

今後こそ,ということで実行しました.

OKです.

サンプル left01.jpg に対して,サンプル edge.cpp のコンパイル結果を適用した図.