2012-03-22 11 views
0

私は入力にイメージを持っています。それを配列に変換しました。 2つのボールがあり、1つのボールを取り除きたい。 私の考えは、ループを実行し、赤いピクセルがある場合は行ごとに検出することです。この配列のiで、i + 1に赤のピクセルがない場合は、ラインの残りの部分がすべて消去されます。2つのうち1つのボールを検出する(Python)

for i in range(0, len(data)): 
    h = h + 1 
    #print("0"), 
    if (i>1) and (((data[i - 1])[1] > 40 and (data[i - 1])[2] > 40) and ((data[i + 1])[1] > 40 and (data[i+1])[2])): 
      print("_"), 
    elif (data[i])[1] < 40 and (data[i])[2] < 40 and (data[i])[0] > 50 : 
       j = j + 1 
       print "#" , 
    else : 
        print("."), 
       #else : 
     # print data[i], 


    if h == 64 : 
     h = 0 
     test = True 

     print("\n") 

私のコードが間違っているとどのように私は私のメソッドを介してボールを消すことができますか?

+1

しかし、あなたは質問をしませんでした... – asawyer

+0

ありがとう、ちょうどそれを編集しました。 – Tsunaze

+0

あなたはその状態の最初の場所で赤をレンダリングできませんでしたか?それを使わないで新しいフレームをレンダリングしますか? – asawyer

答えて

0

あなただけの左側に何かを削除したい場合は、次の

data[:,:data.shape[1]/2] = 0 

または右側:あなたの問題はあなたがボール(赤、緑、青)でを持っているということであれば

data[:,data.shape[1]/2:] = 0 

配列(numpy)、背景やノイズはありません。簡単のために、赤色= 1、緑色= 2、青色= 3の色ならば、

data[np.where(data == 1)] = 0 

は赤いボールを除去します。より洗練された検出ニーズのためには、以下を使用することができます。

あなたのデータがnp配列であることを考えれば、scipy.ndimageからラベルを使用することができます(もちろんボールが重なっても分離したもの):

from scipy.ndimage import label 
labled_data, labels = label(data) 
#If you want to remove the first ball 
labled_data[np.where(labled_data == 1)] = 0 
#Then your second ball will be where the labled data is 2 
#Else if you just temporary want to know where the second ball is: 
labled_data == 2 
#Will be true for those places 
+0

また、上記のラベルは、見つかったボールの数を保持します... – deinonychusaur

+0

私の配列は3つの変数、赤、緑、青で構成されていますか? – Tsunaze

+0

ここではあまりお目にかかりませんが、私はあなたが検出したいボールを持つ配列(データ)を持っていると思いました。あなたは配列があり、赤いボールが唯一の場所であるピクセルが赤で、赤をすべて削除したい場合は、より簡単な方法があります。 – deinonychusaur

関連する問題