不要な背景を取り除くためにいくつかの画像をフィルタリングしていますが、これまでにopenCVを使用してBGRのピクセルをチェックして成功しました。より多くの同様のif文のカップルがあります画像を繰り返し処理する複数の条件を持つPythonのnumpy配列
h, w, channels = img.shape
for x in xrange(0,h):
for y in xrange (0,w):
pixel = img[x,y]
blue = pixel[0]
green = pixel[1]
red = pixel[2]
if green > 110:
img[x,y] = [0,0,0]
continue
if blue < 100 and red < 50 and green > 80:
img[x,y] = [0,0,0]
continue
が、あなたのアイデアを得る:問題は2つのネストされたループを有する画像を反復することはあまりにも遅いことです。問題は、i7で672x1250で約10秒かかることです。
img[np.where((img > [0,110,0]).all(axis=2))] = [0,0,0]
そして、それははるかに高速ですが、私は、NPを使用してそれらにif文、他の複数の条件とを行うように見えることはできません。
今、声明そうのような場合、私は簡単に最初に行うことができます。
ここで私が試したものです:
img[np.where((img < [100,0,0]).all(axis=2)) & ((img < [0,0,50]).all(axis=2)) & ((img > [0,80,0]).all(axis=2))] = [0,0,0]
しかし、エラーがスローされます。
ValueError: operands could not be broadcast together with shapes (2,0) (1250,672)
任意のアイデアが適切にnp.where(または2よりも高速だものを使用して画像を反復処理する方法ネストされたループ)は多くの助けになります!
色に基づいて画像のしきい値を設定しようとしています。これをHSV色空間に変換して処理すると、はるかに簡単になります。 "これは約10秒かかります" - はい、あなたはインタプリタ言語の個々のピクセルを繰り返しています。 –