私は画像マスクの2つの領域のインデックス/位置を抽出しようとしており、python、opencv2、numpyおよびscipyの組み合わせを使用しています。画像マスクの特徴位置のインデックスを、python、opencv2、numpyで取得します。
私は画像と同じサイズのバイナリmask
を持っています。 この情報を使用して
label_im, nb_labels = ndimage.label(mask)
sizes = ndimage.sum(mask, label_im, range(nb_labels + 1))
とラベルとそれの大きさを生成した後、私は最大の領域を抽出することができています。
のは、我々は10×10の行列があるとしましょう:
1 1 1 0 0 0 0 0 0 0
1 1 1 0 0 0 0 0 0 0
1 1 1 0 0 0 0 2 2 0
0 0 0 0 0 0 0 2 2 0
0 3 3 3 3 0 0 2 2 0
0 3 3 3 3 0 0 2 2 0
0 3 3 3 3 0 0 2 2 0
0 3 3 3 3 0 0 2 2 0
0 3 3 3 3 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
たものがあるので、私はさらにエリア2と3を(分析する必要があることを、私は3つの異なる領域(1,2,3)を持っていると私はすでに知っています2つの最大)。
今は領域の
- 一番上の一番左にあるピクセルのインデックス検索する - (N)として以下マーク
- 領域の最右端 - [N]と下マーク を上記のように
同じマトリックス:
1 1 1 0 0 0 0 0 0 0
1 1 1 0 0 0 0 0 0 0
1 1 1 0 0 0 0 (2) 2 0
0 0 0 0 0 0 0 2 2 0
0 (3) 3 3 3 0 0 2 2 0
0 3 3 3 3 0 0 2 2 0
0 3 3 3 3 0 0 2 2 0
0 3 3 3 3 0 0 2 [2] 0
0 3 3 3 [3] 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
はどのようにトンを行うための最速の方法です帽子?
問題1: 私はこれらの行列条件の構文に苦しんでいます。 例えば、私が試してみてください。それが再びバイナリマスクを取得する必要があります
mask2 = mask[label_im == 2]
が、元のマスクが2 を持っているに設定された細胞だけで私が何を上記の結果を正確にわからないんだけど生成する。私はそれをさらに処理することができません。
問題2: その後、最左端のピクセルが設定されている行/列のインデックスを見つけるようなことをしなければなりません。 最下点と同じです。
例えば領域2のために、結果は次のようになります(上記の行列のような)
Xが列を表し、及び行のY(インデックス0から始まる)するか、である
point1-X = 7
point1-Y = 2
point2-X = 8
point2-Y = 7
python/opencv2/numpy/scipyの組み合わせで問題を解決する良い方法がありますか? lowermost rightmost
が最後のものであろう一方
すごいです!助けてくれてありがとう!それは完璧に動作します! –
私は最初にnumpyベースのソリューションを試した後、サンプルイメージ1920x1080でopencv-solutionを試しました。 S1:0.0529999732971sの時間、S2:0.0599999427795sの時間、これらの実装の違いは本当に目立っていません。とにかくopencvベースのソリューションもありがとう! –