Opencv обнаруживает вторжение в области неправильного многоугольника - PullRequest
0 голосов
/ 02 июня 2019

Я пытаюсь создать в своем доме систему видеонаблюдения своими руками с малиной через поток rtsp с ip-камеры.Я не очень опытен с opencv и python, но в настоящее время я все еще пытаюсь научиться их использовать.Я уверен, что моя проблема может быть простой для многих.

Я использую код отслеживания, загруженный с github, и настроил его для своих нужд.Я легко могу обнаружить присутствие субъекта в установленной мной квадратной области просто с помощью этих команд:

_, contours0, hierarchy = cv2.findContours(mask,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
for cnt in contours0:
    area_detect = cv2.contourArea(cnt)
    if area_detect > minsize_detect and area_detect < maxsize_detect:

        M = cv2.moments(cnt)
        cy = int(M['m10']/M['m00'])
        cx = int(M['m01']/M['m00'])
        x,y,w,h = cv2.boundingRect(cnt)

        # Detect in area point
        if cx in range(Area_up_pnt,Area_down_pnt) and cy in range(Area_left_pnt,Area_right_pnt):
            count_in_area += 1;

Я также могу идентифицировать сторону вторжения по лево-правым линиям квадрата с помощью этих команд:

for i in persons:
    if abs(cx-i.getX()) <= h and abs(cy-i.getY()) <= w:
        # update coordinates
        i.updateCoords(cx,cy)

        # Verso sx
        if i.goline_SX(LINE_rightarea_pnt,LINE_rightarea_pnt) and cx in range(Area_up_pnt,Area_down_pnt):
             countleftinside += 1;

Код работает нормально, но, основываясь только на координатах x, y в обычном квадрате, я не получаю желаемой точности.На самом деле область должна быть неправильным многоугольником, например: enter image description here

Я надеюсь, что изображение поможет вам понять, чего я хочу достичь.Заранее благодарю за ответы.

1 Ответ

0 голосов
/ 02 июня 2019

Полагаю, вы просто хотите, чтобы это был не обычный прямоугольник, как форма

Попробуйте с opencv minrect .

rect = cv2.minAreaRect(cnt)

enter image description here

А если вам нужна неправильная форма, попробуйте использовать opencv Выпуклый корпус

hull = cv2.convexHull(cnt)

enter image description here

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