2016-07-18 1 views
-1

私はいくつかの衛星画像を処理するためにopencvとnumpyを使用しています。RGBイメージのピクセルが緑色であるかどうかを確認するにはどうすればよいですか?

"緑"(作物や植生)とは "土地"を区別する必要があります。

私の質問は:どのような値をRGB形式の緑色に近いものにすることができますか?

img = cv2.imread('image1.jpg',1) 
mat = np.asarray(img) 
for elemento in mat: 
    for pixel in elemento: 
     if pixel[1] > 200: # If the level of green is higher than 200, I change it to black 
      pixel[0] = 0 
      pixel[1] = 0 
      pixel[2] = 0 
     else: # If the level of G is lower than 200 I change it to white. 
      pixel[0] = 255 
      pixel[1] = 255 
      pixel[2] = 255 

このコードは動作しますが、本当に便利ではありません。

は、私がこれまでにやっていることです。どのRGB値が緑に対応し、どのRGB値が緑に対応するのかを判断するためには、より正確な方法が必要です。

どうすればこの問題を解決できますか?

+2

1つのわずかなシワr = 255 g = 200 b = 255は薄紫です。代わりにg> 64、g> r + b –

+2

を使用することをお勧めします。[color distance](https://en.wikipedia.org/wiki/Color_difference)に役立ちます。 – Arnial

+0

一般的には、赤外線バンド、地面の真実と精度の分析とともにテクスチャなどの他の要因を使用することがある監督された分類を行いたいと思うでしょう。 RGBだけでそれをしようとすると、成功は限られてしまうでしょう。 –

答えて

0

InRange関数を使用して、特定の範囲の色を見つけることができます。これは、ピクセルの値が1つまたは少数しかない衛星から緑の色を見つけることができないためです。 InRange関数は、設定された色の範囲(緑色の範囲を設定する必要があります)を見つけ出し、元の画像と同じ緑色のピクセルの座標を持つ画像を返します。私は同様の質問をHEREに例とコードを付けて回答しました(Pythonではありませんが、その方法を理解してOpenCVプロジェクトに簡単に実装する必要があります)。

+1

Dainiusに感謝します。私は自分の投稿とopencvのリンクを私のリダイレクト先に読みました。 –

関連する問題