ОБНОВЛЕНИЕ:
Смотрите комментарии по этому вопросу вместо того, чтобы читать его.
Я согласен с @Cris, как он сказал в комментариях "никто не нашел это полезным реализовать его для цветных изображений ".
Существует множество функций, позволяющих добиться того же самого в очень сжатой форме, которые зависят от вашего варианта использования.
Но это все еще вопрос общего любопытства от новичок. Таким образом, одним простым подходом к тому же может быть:
def bgr_threshold(src_bgr, thresh_bgr, maxval_bgr, type_bgr):
b, g, r = cv2.split(src_bgr)
thresh_b, thresh_g, thresh_r = thresh_bgr
maxval_b, maxval_g, maxval_r = maxval_bgr
type_b, type_g, type_r = type_bgr
ret_b, thresh_img_b = cv2.threshold(b, thresh_b, maxval_b, type_b)
ret_g, thresh_img_g = cv2.threshold(g, thresh_g, maxval_g, type_g)
ret_r, thresh_img_r = cv2.threshold(r, thresh_r, maxval_r, type_r)
thresh_img_bgr = cv2.merge((thresh_img_b, thresh_img_g, thresh_img_r))
return ((ret_b, ret_g, ret_r), thresh_img_bgr)
ret, th = bgr_threshold(image, (127, )*3, (255, )*3, (cv2.THRESH_BINARY, )*3)
Хотя это делает его с точки зрения оптимизации почти в 3 раза медленнее.