11

PythonでOpenCVを使用しています。画像があり、やりたいことは、BGR 値 [0, 0, 255] のすべてのピクセルを [0, 255, 255] に設定することです。

画像をポスタライズする方法について以前の質問をしました。その回答から、インデックスの配列を使用したインデックス作成について学びました。例: image[image > 128] = 255

image > 128 は条件を満たすインデックスの多次元配列の配列を返すため、これがどのように機能するかを理解しています。次に、この配列を画像に適用し、それらを 255 に設定します。これを拡張して、配列の値を実行します。

私は次のことを試しました:

      red = np.array([0, 0, 255])
      redIndex = np.where(np.equal(image, red))
      image[redIndex] = np.array([0, 255, 255])

しかし、次のエラーで機能しません。

ValueError: array is not broadcastable to correct shape

これを処理する効率的な方法はありますか?

4

1 に答える 1

19

以下のような配列のような画像を考えてみましょう:

>>> red
array([[[  0,   0, 255],
        [  0,   0, 255],
        [  0,   0, 255],
        [  0,   0, 255],
        [  0,   0, 255]],

       [[  0,   0, 255],
        [  0,   0, 255],
        [  0,   0, 255],
        [  0,   0, 255],
        [  0,   0, 255]]])

そのすべての要素は [0,0,255] です。その形状は2x5x3です。そこには他の値もあると考えてください。(私はそれらすべてを作成することはできません)。

[0,0,255] が存在する場所を見つけて、[0,255,255] に変更します。次のように実行できます。

>>> red[np.where((red == [0,0,255]).all(axis = 2))] = [0,255,255]

今度は赤をチェック。

>>> red
array([[[  0, 255, 255],
        [  0, 255, 255],
        [  0, 255, 255],
        [  0, 255, 255],
        [  0, 255, 255]],

       [[  0, 255, 255],
        [  0, 255, 255],
        [  0, 255, 255],
        [  0, 255, 255],
        [  0, 255, 255]]])

これがあなたが望むものであることを願っています。

試験結果:

このリンクからコードをチェックしてください: https://stackoverflow.com/a/11072667/1134940

質問にあるように、すべての赤いピクセルを黄色に変更したいと思います。

だから私はこれを最後にコードの下に追加しました:

im2[np.where((im2 == [0,0,255]).all(axis = 2))] = [0,255,255]

以下は私が得た結果です:

ここに画像の説明を入力

緑の地面を黄色の地面に変更したい場合:

im2[np.where((im2 == [0,255,0]).all(axis = 2))] = [0,255,255]

結果 :

ここに画像の説明を入力

于 2012-07-11T14:15:00.957 に答える