Есть ли у нас какой-либо алгоритм / методология в opencv, с помощью которого я могу идентифицировать объект независимо от того, насколько темное или яркое солнце.
Я знаю, что это может быть старой проблемой для всех людей, которые работали над обработкой изображений.
Я пытался определить цвета RGB, используя диапазон HSV, проблема в том, что диапазоны, которые работают утром, не работают эффективно днем или облачно или солнечно (короче, когда меняется внешнее освещение) ). По крайней мере, один из цветов не удается определить в какой-то момент дня. Поэтому я не смог сделать свою программу стабильной с одним набором значений цветов RGB.
Видимо эти значения работают вечером
lower = {'red': (0, 70, 50), 'green': (30, 28, 50), 'blue': (90, 25, 21)}
upper = {'red': (7, 255, 255), 'green': (85, 255, 255), 'blue': (230, 255,255)}
в то время как днем,
lower = {'red': (0, 70, 50), 'green': (40, 28, 50), 'blue': (97, 25, 30)}
upper = {'red': (5, 255, 255), 'green': (85, 255, 255), 'blue': (230, 255, 255)}
И это часть кода, в которой я выполняю обработку изображений,
frame = cv2.imread('picture.png')
blurred = cv2.GaussianBlur(frame, (7, 7), 0)
hsv = cv2.cvtColor(blurred, cv2.COLOR_BGR2HSV_FULL)
kernel = np.ones((5, 5), np.uint8)
mask = cv2.inRange(hsv, lower[key], upper[key])
print(lower[key])
print(upper[key])
mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)
mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel)
# find contours in the mask and initialize the current
# (x, y) center of the ball
_, cnts, _ = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL,
cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(frame, cnts, -1, (0, 255, 255), 1)
if len(cnts) > 0:
c = max(cnts, key=cv2.contourArea)
((x, y), radius) = cv2.minEnclosingCircle(c)
if radius < 250:
cv2.circle(frame, (int(x), int(y)), int(radius)
cv2.putText(frame, key + " dice", (int(x - radius), int(y - radius)), cv2.FONT_HERSHEY_SIMPLEX, 1.0,
colors[key], 2)
cv2.imshow("Frame", frame)
Я хотел бы знать, есть ли лучший способ обработки изображения с постоянными значениями, чтобы я мог определить цвета RGB. В настоящее время он работает, но он не стабилен, я не могу рассчитывать на то, что программа будет работать при любых условиях. Хотелось бы узнать, как в режиме реального времени решить эту проблему.