読者です 読者をやめる 読者になる 読者になる

ゆっくり

大学生。有益なことは書いてありません。

OpenCVとやらに触れてみた

能代宇宙イベントでソフトを担当した友人(とても優秀)が、ランバックの際GPSではなくゴールに置かれたカラーコーンを認識すればよいのではということを話していた。

ホーンと思いながらggってみるとどうやらOpenCVとやらでできそうなので少し触れてみることにした。

 

じゅんび

まずOpenCVとはなんぞやと思い調べるとWikipediaにあった。

OpenCV - Wikipedia

画像処理や画像解析に関するオープンソースのライブラリというもののようだ。

ライブラリというならmbedのときのように導入してあげて関数を使わせていただく感じかなと思い取りあえずOpenCV3.1.0をDL。

DOWNLOADS | OpenCV

.hとか.libとかおおみたことあるぞこれと思ったのだがどうすればいいのか……。

これまたggるとVisualStudioのプロジェクトでヘッダを参照するにはインクルードパスとやらが、ライブラリを参照するにはライブラリパスとやらが、関数を使うにはライブラリとのリンクとやらが必要だと分かった。(ここまでとても時間がかかった())

ううむとおもいながらVisualStudioをいじってるとプロパティで

f:id:anyo_susumu:20160822205303p:plain

f:id:anyo_susumu:20160822205314p:plain

こんなのがあったのでこれだ!!リンカーとか書いてるし!!と思いincludeとlibを追加。

ここであれ?最後のいっこなんだと気づきわけわからんとなる。

ggる。(最初からそうしろという話ですがggっても分からんかった)

www.buildinsider.net

こんな素晴らしいものを見つけてしまう。

ふむふむあってるあってるぞと思いながら読み進み、ライブラリとのリンクができていないのだと分かる。

いわれた通り 追加の依存ファイル に opencv_world310d.lib を追加し、サンプルプログラムとやらを試してみると真っ赤な画像が表示された!これで多分おっけーなんだろうと自分に言い聞かせて次へ……

 

どんな関数があるねん

どんな関数があるのかなと思い取りあえずggる。

opencv.blog.jp

はいきた。(世の中はっょぃ人ばかりだなあ……)

赤色とそれ以外を判別する方法は……色検出という項目があった。

必要そうな関数は

画像の読み込み imread()

RGB→HSV変換 cvtColor()

指定した範囲の色の検出 InRange()

画像の表示 imshow()

ぐらい……?

たしかにRGBだとどうやって色判別すんねんって感じやし、HSVだと値で判別しやすそうでなるほどなーと思った。(情報学基礎感)

画像の型はMat型というらしく

cv::Matの基本処理 — OpenCV-CookBook

行列かーなるほどーって感じだ()。

 

やってみる

0<h<20

100<s<255

0<v<255

これが

f:id:anyo_susumu:20160823061549j:plain

 

こう

f:id:anyo_susumu:20160823061908p:plain

 

(色相環だと彩度と明度あまり関係ないか)

 

やっとこさ赤色かどうかの判定ができた。これをランバックに使うにはまだたくさんやんなきゃなんないことがあって大変だなあとおもいました。(小並感)

試行錯誤してる間前述の友人に見られてなんだか恥ずかしかった。たぶん何やってるかもパッと見ただけで分かったっぽい。

こんなことするよりもっと基礎的なことやらないといけないなとこれ書いてる途中に思った。