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

BounceBall#02 OpenCVで四角形を検出する その1

Android Java OpenCV 開発

Androidでカメラを使えるようになったので、カメラの画像から四角形を検出したいと思います。一気に書くのは大変なので、下記のように分割して書きます。
その1 四角形の領域を抽出する
その2 輪郭を抽出する
その3 輪郭をポリゴン近似して頂点座標を求める

ソースコードgithubで公開しています。
https://github.com/imoto-yuya-1234/BounceBall
SHA: c86a350efd43e6949997f76f0117b04c43321b6c

四角形の領域を抽出する

まずは四角形の領域を抽出する必要があります。
今回は例えば白い四角形を検出することを考えて、輝度値の高い部分を抽出すれば四角形の領域を抽出できるとしました。そこでカメラ画像をグレースケール化して、輝度値において2値化します。

このブログに詳しく書いています。
blog.goo.ne.jp

こんな感じで実装できます。

// 入力画像をグレースケール変換
Imgproc.cvtColor(tempMat, tempMat, Imgproc.COLOR_RGBA2GRAY);
// 輝度値の高い箇所を抽出
Imgproc.threshold(tempMat, tempMat, 0, 255, Imgproc.THRESH_BINARY | Imgproc.THRESH_OTSU);

THRESH_OTSUを使うことで、自動で最適な閾値を設定してくれるみたいです。
実際の入出力画像を示します。

こちらが入力画像(カメラ画像)です。

こちらが出力画像(2値化した画像)です。この画像から四角形を検出します。