2017-12-28 18 views
0

RGBイメージの3D配列があり、np.deleteを適用すると2dの位置で特定された特定のピクセルを削除します。出力は3Dアレイのように再構成できません。例:Numpy 3dアレイから2dインデックスを削除する

indices = [(23, 21),(24, 22),(23, 23),(23, 24),(23, 25),(22, 26)] 

I = np.empty(ImageRGB.shape()) 

I = np.delete(ImageRGB,obj=indices)  

問題: 「I」は、3番目のカラーチャネルのために再構成できません。

私はその色チャネルとインデックスの要素を削除することができますどのように

+0

私はあなたがそれを削除することはできません。しかし、あなたはピクセルの色を変更することができます... – MaxU

答えて

0

np.delete実際には配列のセクションを削除することを意図したが、これは、あなたがイメージからピクセルを削除するときに何をしたいのか、おそらくではありません。その代わりに、これらのピクセルを黒([0, 0, 0])または白(おそらく[1, 1, 1]または[255, 255, 255]、画像のエンコード方法に応じて)のような「バックグラウンド」値に設定することをお勧めします。

NumPyのインデックスを使用してこれらの値を設定できます。たとえば、

image_rgb = np.random.rand(30, 30, 3) 
indices = [(23, 21),(24, 22),(23, 23),(23, 24),(23, 25),(22, 26)] 

i, j = zip(*indices) 
image_rgb[i, j] = [0, 0, 0] # set values to black 
+0

なぜ、 'indices'ではなく' indices'で 'zip'を呼び出しましたか? – ninesalt

+0

イメージからシームを削除したい、グレースケールイメージでメソッドが動作している、シームとリシェイプを(i-1、j)として削除しますが、RGBで削除できません。 –

+0

@ Swailem95インデックスを解凍しないとうまくいきません:) – jakevdp

0

私は解決策を試してみました。 イメージを3つのカラーチャネルに分割し、np.deletをすべて1つに適用してから再度再結合します。

ありがとうございます。

関連する問題