我需要对大量图像进行一些快速阈值处理,每个 RGB 通道都有一个特定范围,即删除(使黑色)不在 [100;110] 中的所有 R 值,不在 [80; 中的所有 G 值; 85] 和所有不在 [120;140] 中的 B 值
使用 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
虽然这按预期工作,但速度非常慢!
关于如何快速实现这一点的任何想法?
非常感谢,Bjarke