AndroidでOpenCV 画像から青色を検出する
Androidのカメラ画像から青色を検出します。
このブログを参考にしました。
アンドロイドでOpenCV:色検出
実装はこんな感じ。
// 青色を抽出 Imgproc.cvtColor(tempMat, tempMat, Imgproc.COLOR_RGBA2BGR); Imgproc.cvtColor(tempMat, tempMat, Imgproc.COLOR_BGR2HSV); Core.inRange(tempMat, new Scalar(90, 70, 70), new Scalar(110, 255, 255), tempMat); Imgproc.cvtColor(tempMat, tempMat, Imgproc.COLOR_GRAY2BGRA);
他の色を抽出したいときの設定はこんな感じのようです。
// 赤色 Core.inRange(tempMat, new Scalar(0, 100, 30), new Scalar(5, 255, 255), tempMat); // 緑色 Core.inRange(tempMat, new Scalar(50, 50, 50), new Scalar(80, 255, 255), tempMat); // 黄色 Core.inRange(tempMat, new Scalar(20, 50, 50), new Scalar(40, 255, 255), tempMat); // 肌色 Core.inRange(tempMat, new Scalar(0, 38, 89), new Scalar(20, 192, 243), tempMat);
色の抽出にはHSV形式が良いらしいです。この色の抽出が結構大変でした。RGBAから直接HSVに変換はできないらしく、RGBA→BGR→HSVとする必要があります。またinRangeの出力はGRAYなので適宜変換してください。ここでは色を抽出した後はGRAY→GBRAとしています。このことがわかるのにかなり時間を要しました。どれか一つでも抜けると出力画像がおかしくなったり、アプリ起動中に落ちたりします。
実際の入出力画像を示します。
入力画像(カメラ画像)
出力画像(青色を白に他を黒とした画像)