Как заменить цвет для цветных объектов на изображении? - PullRequest
0 голосов
/ 05 июля 2019

Я пытаюсь обнаружить края на изображениях видео, но методы обнаружения краев, такие как canny, работают не очень хорошо, возможно, из-за сходства между цветом блоков и цветом или яркостью пола, поэтому я хочу найти способ сделатьвсе красные и синие прямоугольники выглядят как можно более белыми или могут быть наилучшим способом определения границ как можно более совершенных для каждого кадра, поскольку это является конечной целью.

enter image description here

Ответы [ 2 ]

1 голос
/ 05 июля 2019

Просто чтобы завершить мой комментарий в вашем вопросе.Можно использовать цветовые пространства 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%.

Результат этого небольшого кода:

enter image description here

Itне идеален, но его можно уточнить, используя методы, предложенные в другом ответе.Надеюсь, это поможет.

1 голос
/ 05 июля 2019

Тогда я рекомендую использовать отслеживание цвета.

  1. Конвертировать в HSV

cv2.bgr2hsv

Почему hsv?несмотря на изменение яркости, вы все еще можете обнаружить этот цвет

Фильтрация

Вы можете использовать cv2.inrange

Шумоподавление

Использование cv2.Gaussianblur

Обработка контуров

использование cv2.findContours

Найдите метод использования края

Повторите этот шаг для каждого цвета вашей коробки

Надеюсь, эта помощь

...