Используя Python, получите пиксели внутри многоугольника - PullRequest
0 голосов
/ 16 апреля 2019

У меня есть потоковое изображение с камеры.Из этого потокового изображения я создал большой набор полигонов, каждый из которых является «областью интереса».Затем я сгенерировал маску с использованием многоугольников и применил эту маску к потоковому изображению, поэтому теперь я «вижу» только маскированные области.

Вопрос, который у меня сейчас возникает, заключается в том, как выяснить, есть ли что-то внутри моей маскированной области (например, кролик, человек, машина и т. Д.) - обратите внимание, что не имеет значения, ЧТО это?только то, что пространство занято.

Я обнаружил, что пространственный фильтр Лапласа производит довольно хорошее визуальное представление о том, что объект находится в многоугольнике или нет (по крайней мере, визуально), но я понятия не имею, что будет дальшешаг будет.Мои мысли состоят в том, чтобы усреднить пиксели в черно-белом изображении, и если они пересекают порог, тогда предположение да, что-то там есть.

Файл, содержащий координаты многоугольника, имеет вид:

x1,y1;x2,y2;c3,y3;x4,y4,...
x1,y1;x2,y2;c3,y3;x4,y4,...
x1,y1;x2,y2;c3,y3;x4,y4,...
x1,y1;x2,y2;c3,y3;x4,y4,...
x1,y1;x2,y2;c3,y3;x4,y4,...

Мой код для чтения массива полигонов выглядит следующим образом:

pointlist = []
data = open(args["slots"]).read().split()
for row in data:
    tmp = []
    col = row.split(";")
    for points in col:
        xy = points.split(",")
        tmp += [[int(pt) for pt in xy]]
    pointlist += [tmp]
slots = np.asarray(pointlist)

Маскировка и фильтрация изображений выглядит следующим образом:

    img = cv2.resize(img, (480, 270))

    blurred = cv2.GaussianBlur(img,(3, 3), 0)

    mask = np.zeros(blurred.shape[:2], dtype="uint8")

    cv2.fillPoly(mask,slots,(255,255,255))

    masked = cv2.bitwise_and(blurred,blurred,mask=mask)

    lap = cv2.Laplacian(masked, cv2.CV_64F)
    lap = np.uint8(np.absolute(lap))

Буду очень признателен, если вы дадитемне пример кода того, что делать дальше.

...