Мне нужно быстро установить пороговое значение для большого количества изображений с определенным диапазоном для каждого из каналов RGB, то есть удалить (сделать черным) все значения R, отсутствующие в [100; 110], все значения G, не входящие в[80; 85] и все значения B, отсутствующие в [120; 140]
Использование привязки python к OpenCV дает мне быстрое пороговое значение, но пороговое значение для всех трех каналов 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
Хотя это работает так, как задумано, это ужасно медленно!
Любые идеи каккак я могу получить быструю реализацию этого?
Большое спасибо заранее, Бьярке