Просто чтобы завершить мой комментарий в вашем вопросе.Можно использовать цветовые пространства HSV / HLS и использовать inRanges с каналом Hue.Например:
import numpy as np
import cv2
# load image and threshold it
original = cv2.imread("a.jpg")
hsvframe = cv2.cvtColor(original, cv2.COLOR_BGR2HLS)
mask = cv2.inRange(hsvframe, (160,40,40), (180, 255, 255))
mask = mask + cv2.inRange(hsvframe, (0,40,40), (12, 255, 255)) # color red is at the beginning and end of the hue wheel
original[mask==255] = (0,255,0)
cv2.imshow("image", original)
cv2.waitKey(0)
cv2.destroyAllWindows()
Что следует помнить, Hue изменяется от 0 до 180 в np.uint8.Это означает, что если вам нужен оттенок 300-360, ограничения будут 150-180.Два других значения - это 0-255, где 255 = 100%.
Результат этого небольшого кода:
Itне идеален, но его можно уточнить, используя методы, предложенные в другом ответе.Надеюсь, это поможет.