Есть ли способ идентифицировать объекты при любых внешних условиях освещения - PullRequest
0 голосов
/ 09 мая 2019

Есть ли у нас какой-либо алгоритм / методология в 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. В настоящее время он работает, но он не стабилен, я не могу рассчитывать на то, что программа будет работать при любых условиях. Хотелось бы узнать, как в режиме реального времени решить эту проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...