2017-06-12 8 views
0

私はPythonでの高速画像のピクセル操作を探しています。 2つのrgb値の比較を高速化する方法はありますか?速いピクセルの比較

img_new = np.ones(img_org.shape[:2], dtype="uint8") * 0 
for i in range(img_org.shape[0]): 
    for j in range(img_org.shape[1]): 
     if img_org[i, j][0] == 0 and img_org[i, j][2] == 0: 
      img_new [i, j] = 255 
     else: 
      img_new [i, j] = 0 

答えて

1

あなたがnumpyの中に「ベクトル化」比較を使用することができる:式img_org[:, :, 0] == 0

img_new = np.zeros(img_org.shape[:2], dtype="uint8") 
img_new[(img_org[:, :, 0] == 0) & (img_org[:, :, 2] == 0)] = 255 

は、同じサイズの画素の全ての第1のコンポーネント(おそらく赤チャネル)のサブアレイを取り、ブール配列を返します赤チャネルが0のピクセル上ではTrueの画像、それ以外の場合はFalseとなります。緑のチャンネルについても同じことが行われ、&を使用して、赤と緑のチャンネルの両方がゼロであるすべてのピクセルを見つける。次に、このマスクを使用して一致するピクセルを255に更新します。np.ones(...) * 0np.zeros()に置き換え、コードにelseブランチが必要ないことにも注意してください。タッチしていないピクセルはすでにゼロです。

+0

素晴らしいスピードとコードの改善!ニースの説明、ありがとう@Sven Marnach – snowflake

関連する問題