次のように、画像がnumpy配列に格納されていimread()
ます。
>>> ndim
array([[[ 0, 0, 0],
[ 4, 0, 0],
[ 8, 0, 0],
...,
[247, 0, 28],
[251, 0, 28],
[255, 0, 28]],
[[ 0, 255, 227],
[ 4, 255, 227],
[ 8, 255, 227],
...,
[247, 255, 255],
[251, 255, 255],
[255, 255, 255]]], dtype=uint8)
>>> ndim.shape
(512, 512, 3)
特定の色の値を持つピクセルの(x、y)座標(または複数の座標)を効率的に見つけたい、たとえば
>>> c
array([ 32, 32, 109], dtype=uint8)
>>> ndim[200,200]
array([ 32, 32, 109], dtype=uint8)
>>> ndim.T[0, 200, 200]
32
>>> ndim.T[1, 200, 200]
32
>>> ndim.T[2, 200, 200]
109
...この場合、(200、200)のピクセルがRGB値(32、32、109)を持っていることがわかります-これをテストできます。
私がやりたいのは、ndarrayにピクセル値を照会し、座標を取得することです。上記の場合、推定関数find_pixel(c)
は(200、200)を返します。
理想的には、このfind_pixel()
関数は、最初に見つかった値だけでなく、座標タプルのリストを返します。
私はnumpyの「ファンシーインデックス」を見てきましたが、それは私を大いに混乱させました...これを理解しようとする私の試みのほとんどは、酷使され、不必要にバロック的でした。
私がここで見落としている非常に簡単な方法があると確信しています。これを行うための最良の方法は何ですか?私が概説したものよりもこれらの値を取得するための完全に優れたメカニズムはありますか?