gologiusの巣

プログラミングなどの技術メモです。誰かの役に立てるとうれしいです。

Pythonで画像の0以外の値が入っているindexを取り出す+RGB画像の例

画像(正確にはndarray)で0以外が入っているindexを取り出します


こんな感じ

import numpy as np

img = np.zeros((200,100), bool) #画像作成
img[50,50] = True
img[50,20] = True

result = np.nonzero(img)
print result
>>(array([50, 50], dtype=int64), array([20, 50], dtype=int64))

#使用例
print img[result[0][0], result[1][0]]
>>True

Falseが0扱いになります。
結果はこの場合2次元配列になっています。
画像的にはimg[y,x]になってるので注意。
あと、ndarrayは[y,x]的な書き方できますけどリストはできない。

これRGBだったらどうなるんですかね?
こうなります

img = np.zeros((200,100,3), np.uint8)
img[40,60] = [10,0,60]
img[50,60] = [80,90,0]

result = np.nonzero(img)
print result
>>(array([40, 40, 50, 50], dtype=int64), array([60, 60, 60, 60], dtype=int64), array([0, 2, 0, 1], dtype=int64))

#取り出し例
print img[result[0][0], result[1][0], result[2][0]]
>>10
#書きなおすと 
print print img[40,60,0]
>>10

…なんか難しくなった感あります

RGBの値を2つのピクセルにそれぞれ入れました。
[10,0,60],[80,90,0]です。
この中に0でない値は4つあります。
なのでresultの各リストの長さは4です。