Алгоритм водораздела однозначно идентифицирует перекрывающиеся объекты на изображении, возможно ли это в потоке веб-камеры? - PullRequest
0 голосов
/ 01 июня 2019

Я прочитал учебник https://www.pyimagesearch.com/2015/11/02/watershed-opencv/, который открыл мне глаза на эту удивительную возможность, и сейчас я пытаюсь внедрить его в мою текущую программу отслеживания объектов. Я изо всех сил пытаюсь внедрить этот алгоритм в мой проект, потому что он требует видеопотока, а также создает маску, чтобы видеть только красные объекты. Моя главная проблема с программой заключается в том, что перекрывающиеся объекты считаются как один, тогда как после прочтения этого урока я понял, что есть алгоритм для этого, но я не могу понять, как внедрить его в мой проект.

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

Я ценю любые комментарии. большое спасибо

учебных пособий / исследований, за которыми я следовал https://www.pyimagesearch.com/2015/11/02/watershed-opencv/ Сегментация изображения с использованием среднего сдвига, объясненного https://opencv -python-tutroals.readthedocs.io / ен / последний / py_tutorials / py_imgproc / py_watershed / py_watershed.html

# This is my main functionality in my code. And I have no idea where I can implement 
# watershed succesfully because of the color filtering and constant background change


while True:
frame = camera.read()  # read camera

if frame is None:
    print('fail with camera. Is it being used? src # correct?')
    break

frame = imutils.resize(frame, width=400)  # resize frame
height = np.size(frame, 0)  # calculates the height of frame
width = np.size(frame, 1)  # calculates the width of frame
blurred = cv2.GaussianBlur(frame, (21, 21), 0)  # blurring image before hsv applied (less noise)
hsv = cv2.cvtColor(blurred, cv2.COLOR_BGR2HSV)  # creating hsv from blurred frame and converting the bgr to hsv

mask = cv2.inRange(hsv, np.array(args["a"]), np.array(args["b"]))  # mask is setting hsv in range of the lower and upper blue ranges
mask = cv2.erode(mask, None, iterations=2)  # erode for less noise / more white
mask = cv2.dilate(mask, None, iterations=2)  # dilate does similar but makes whiteness thicker
res = cv2.bitwise_and(frame, frame, mask=mask)

contours = cv2.findContours(mask.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)  # find contours of mask
contours = imutils.grab_contours(contours)  # get them

middleLine = (height / 2)  # calculate the middleLine
cv2.line(frame, (0, height // 2), (width, height // 2), (100, 200, 100), 2)  # // = int division | draw the line
rects = []

if len(contours) > 0:  # don't pass in empty contour!!!
    for c in contours:  # loop through them
        if cv2.contourArea(c) < args["e"]:  # not big enough to be considered an object
            continue  # go next
        (x, y, w, h) = cv2.boundingRect(c)  # create rect for the object

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

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