OpenCV」カテゴリーアーカイブ

プロ生ちゃん Hidden Object ゲームを作ろう…の途中

プロ生ちゃん Advent Calendar 2014 – Qiita http://qiita.com/advent-calendar/2014/pronama-chan の8日目の記事です。Xamarin+F# とダブってしまったので、ゲーム自体ができていません…という訳ではなくて、マスコットアプリ文化祭 2014 もかねて作る予定だったのですが、なんかあれこれと体調が悪くて、できあがりそうにないので、構想と途中経過だけでもつらつらと。 マスコットアプリ文化祭 2014 (Mascot Character Apps Contest) http://pronama.github.io/mascot-apps-contest/2014/ Hidden Object Game とは? Online Hidden Object Games | Big Fish http … 続きを読む

カテゴリー: 開発, OpenCV | 1件のコメント

F#でOpenCvSharpを使ってカメラキャプチャする

OpenCvSharp を使ってカメラキャプチャをする | Moonmile Solutions Blog http://www.moonmile.net/blog/archives/6258 の F# 版です。WPF で作ってあります。 やっていることは、C# 版と同じで、カメラ用のウィンドウを開くのとボタンを押したときにキャプチャする処理が入っています。ファイルに保存する処理はほとんど同じなので省略。 F# で WPF を扱うときは FsXaml のタイププロバイダを使います。ボタンイベントとかはボタン自身に名前を付けて Add.Click 等で追加すれば ok. フォームの場合は Bitmap に落とすのに BitmapConverter.ToBitmap を使いますが、WPF の Image.Source に対しては WriteableBitmapConverter.ToWrite … 続きを読む

カテゴリー: F#, OpenCV | コメントする

OpenCvSharp を使ってカメラキャプチャをする

画像解析まわりを F# で組もうとする場合、OpenCV の Mat と相互変換しなくちゃいけません。OpenCV 自体は C++ ベースなのでロジックを C++ で組むのがベータなのですが、ちょっとトライ&エラーがやりづらいんですよね。OpenCV の機能自体を使うのであれば、そのまま OpenCvSharp を使えばいいのですが、内部ロジックを弄る必要がある(特にテンプレートマッチの関数とか特徴量の関数とか)予定なので、できるだけデータ変換はおこしたくないな、と思っていました。 ■OpenCvSharp は導入が簡単である shimat/opencvsharp http://github.com/shimat/opencvsharp OpenCvSharpをつかう その17(NuGetで導入) – schima.hatenablog.com http://schima.ha … 続きを読む

カテゴリー: C#, OpenCV | 2件のコメント

麻雀牌認識のプロセスを考える

■目的 こんな画像から、14牌を認識する、とする。この画像自身の切り出しをどうするのか?って問題があるけど、麻雀牌自体は手元に置くことが多いし、ある程度画像認識の範囲を絞り込むことができるだろう…という仮定からスタートする。もちろん、これは「仮定」なので、前提条件が間違っている場合も頭の隅に入れておく。 ■手順を考察 いきおい、牌の物体認識から入ってしまうと思われるが、それは駄目だ。というか無駄だ。牌の形は「四角」で固定されているし、牌の表面は主に白でおおわれている。さらに背景は、白以外(大抵は緑のマット?)なのだから、わざわざ物体認識という大層なことをやらなくてもいい。白っぽい部分を抽出すれば、牌と特定できるだろう。 さらに、この場合は牌が14個連なっている。多少上下にずれているが、だいたいは真ん中で一直線になっている。牌の数は決まっていて、14個であるのだから、先に大まかな … 続きを読む

カテゴリー: OpenCV | コメントする

色相のみでヒストグラムを計算表示してみる

大雑把に、HSV 変換をした後に色相(Hue)だけを取り出して、ヒストグラムにしてみる。 こうすると、対象物(この場合はゲームの駒)が持っている「色」という特徴量がわかる…ハズ。原子分析みたいなものかも。   背景がオレンジ色なので、それにヒストグラムが引っ張られてしまうのは後で検討するとして、色相が180の幅のままだと分解能が細かく過ぎてピークがとんがり過ぎるかなと。 試しに実画像を調べてみると、 のように広がりを持つので、相関係数でマッチさせるか、もっと単純に色を積算して max だけを取り出すか。色の検出自体は、おおまかで良い(白黒+6色ぐらい)ので、このぐらいであれば、どれだけ検出箇所が多くてもあっという間に終わるハズ。

カテゴリー: C++, OpenCV | コメントする

OpenCV で機械学習を試して…みた

OpenCV で機械学習を試してみる…とまだ終わらず | Moonmile Solutions Blog http://www.moonmile.net/blog/archives/2537 を、「-m 500」に設定して4時間程動かすと XML ファイルが出来上がりました。 検出用のプログラムをざっと作って、 を動かしてみた結果が、次の図です。 全然あっていないじゃんッ!!! ってな状態です。どうも正解画像のサイズが大きすぎた(検出対象は30×30程度なのに、正解画像が45×45なのがちょっと間違い?)らしくって、検出先の画像は倍のサイズにして検出させました。 OpenCV に入っている haarcascade_frontalface_default.xml を使うと、顔検出ができるのでプログラムのほうは大丈夫らしい。 ちなみに、ver.2.3 のほうを使うと、実行時 … 続きを読む

カテゴリー: OpenCV | 1件のコメント

OpenCV で機械学習を試してみる…とまだ終わらず

テンプレートマッチングで画像から取り出すには無理がありそうなので、やはり、独自なオブジェクト検出器を作ってみないとだめか、と思い、 OpenCVで学ぶ画像認識:第4回 オブジェクト検出器の作成方法|gihyo.jp … 技術評論社 http://gihyo.jp/dev/feature/01/opencv/0004 を読んで、試しに、AdaBoost を使ってカスケードを作ろうと思ったのだが、いやあ、ちょっと時間が掛かりすぎる。 ■学習用の正解ファイルの作成 ■オブジェクトの学習 な感じで動かしていますが、4時間ほど経っても終わらず。 駒を検出したいので、今回の場合は正解画像は1つ(ゲーム中に出てくる画像)になるのですが、光の関係や画面を映す関係からいくつかの正解画像を用意します。そのあたりは、opencv_createsamples を使って、1000 枚の画像に水増しします。ファイルは … 続きを読む

カテゴリー: 開発, OpenCV | 1件のコメント

相関係数を計算を自作する(完成)

マスク画像を使えるように、テンプレートマッチの関数を自作します。 templmatch.cpp 内の元ネタを使っても良かったのですが、相加平均を計算するところが、1/w*h で固定値になっているので、マスク画像を渡すと大幅に書き換えになってしまう…というのと、行列全体をフーリエ演算対象にしてしまっているので、そもそもマスク画像を渡すことができない。ってのが自作の理由です。 相関係数を計算を自作する(途中) | Moonmile Solutions Blog http://www.moonmile.net/blog/archives/2509 前回は、RGB チャンネルを平坦に加算していたので誤検出多くなっていましたが、元の関数と同じようにチャンネル毎に相加平均を計算するという方式に変えました。すると、cv::matchTemplate と同じ結果が得られています(厳密にチェック … 続きを読む

カテゴリー: 開発, C++, OpenCV | 3件のコメント

相関係数を計算を自作する(途中)

結局、自作してみる… templmatch.cpp 内にある crossCorr 関数で相関平均を計算しているのだが、フーリエ解析を使っているためか値が違う。 後でコードを見直そう。 ちなみに、Mat:at を使うとデバッグ実行ではひどく遅いのだが、Release ビルドをすると結構速い。 おそらく、mat.hpp に定義されている で設定されている CV_DbgAssert の関数が遅いわけで、これはリリースモードでは外れるようになっている。 この部分を、CV_DbgAssert を使わないように展開してやれば、早くなるのではないかなぁと。

カテゴリー: 開発, 雑談, C++, OpenCV | コメントする

特定点でテンプレートマッチングを行うための考察

テンプレートマッチング法を使うと、教師画像を実画像から簡単に検索できるのだが、相関係数(CV_TM_CCOEFF_NORMED)を使って探索をすると結構遅い…というか、これが目で駒を追うやり方なのかどうかが疑問だったりします。 なので、以下は、ちょっと考察。 なにも、教師画像のすべてをマッチングさせる必要はなくて、教師画像の特徴を掴んで、実画像とマッチングさせればよいのです。これを特徴量という言い方をするのですが、この特徴量の定義として考えられるのが、 教師画像の、色で検出する。 教師画像の、形で検出する。 教師画像の、白黒画像で検出する。 教師画像の、角で検出する。 というやり方があります。 画像処理 (3) 顕著性マップ http://fussy.web.fc2.com/algo/algo12-3.htm をつらつらと読んで考えたのが、教師画像での顕著性のある場所が、実画像 … 続きを読む

カテゴリー: 開発, 雑談, OpenCV | コメントする