画像処理機能を備えたAndroidアプリケーションを作成しようとしています。ビットマップを使用するだけで、類似の色を持つピクセルで等高線をどのように配置できますか?Androidイメージ処理で色が検出され、等高線が表示される
これを見ましたが、これは輪郭線を表示するライブ処理です。私は自分のアプリケーションに静的な画像を使い、同様の色を持つ等高線を表示したいと思っていました。
画像処理機能を備えたAndroidアプリケーションを作成しようとしています。ビットマップを使用するだけで、類似の色を持つピクセルで等高線をどのように配置できますか?Androidイメージ処理で色が検出され、等高線が表示される
これを見ましたが、これは輪郭線を表示するライブ処理です。私は自分のアプリケーションに静的な画像を使い、同様の色を持つ等高線を表示したいと思っていました。
まず、画像処理ライブラリについて考える必要があります。私はOpenCVが良い選択だと思う。次に、画像を読み込んでHSV空間に変換し、inRange
のカラー閾値を適用します。結果イメージでは、輪郭線をfindContours
で検出し、drawContours
またはpolylines
で描画します。完了!
編集
ご入力画像は、例えば、変換RGBからhsv:
Imgproc.cvtColor(rgb,hsv,Imgproc.COLOR_RGB2HSV);
上限値と下限値を定義してください。 HSVカラーホイールを見て適切な範囲を選んでください。 HSVは3つの8ビットチャネルに収まっていますが、Hチャネルはないので、この値を2で割ってください.Hの範囲はOpenCVでは0〜180です。 ここで赤のための例:
Scalar lower(0,100,100);
Scalar upper(10,255,255);
Core.inRange(hsv, lower, upper, segmentedImage);
次に使用:
List<MatOfPoint> contours = new ArrayList<MatOfPoint>();
Mat hierarchy = new Mat();
Imgproc.findContours(segmentedImage, contours, mHierarchy, Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE);
今、あなたは各輪郭を反復処理し、いくつかのものを行うことができます!
inRangeの目的は何ですか?それは似たような色の見える範囲ですか? – Shulz
はい、本当にありがとうございます。あなたはあなたの下限と上限を指定します。この範囲の値はセグメント化されます。詳細な説明については、[here](http://docs.opencv.org/2.4/modules/core/doc/operations_on_arrays.html#inrange)を参照してください。 – PSchn
類似の色を検出するスニペットはありますか? – Shulz