RGBチャンネルごとに特定の範囲で、大量の画像の高速しきい値処理を行う必要があります。つまり、[100; 110]にないすべてのR値、[80;にないすべてのG値を削除(黒にする)します。 85]および[120;140]にないすべてのB値
OpenCVへのPythonバインディングを使用すると、高速のしきい値処理が可能になりますが、3つのRGPチャネルすべてが単一の値にしきい値処理されます。
cv.Threshold(cv_im,cv_im,threshold+5, 100,cv.CV_THRESH_TOZERO_INV)
cv.Threshold(cv_im,cv_im,threshold-5, 100,cv.CV_THRESH_TOZERO)
または、画像をPILからnumpyに変換して手動で実行しようとしました。
arr=np.array(np.asarray(Image.open(filename).convert('RGB')).astype('float'))
for x in range(img.size[1]):
for y in range(img.size[0]):
bla = 0
for j in range(3):
if arr[x,y][j] > threshold2[j] - 5 and arr[x,y][j] < threshold2[j] + 5 :
bla += 1
if bla == 3:
arr[x,y][0] = arr[x,y][1] = arr[x,y][2] = 200
else:
arr[x,y][0] = arr[x,y][1] = arr[x,y][2] = 0
これは意図したとおりに機能しますが、ひどく遅いです!
これをすばやく実装する方法について何かアイデアはありますか?
よろしくお願いします、ビャルケ