У меня есть потоковое изображение с камеры.Из этого потокового изображения я создал большой набор полигонов, каждый из которых является «областью интереса».Затем я сгенерировал маску с использованием многоугольников и применил эту маску к потоковому изображению, поэтому теперь я «вижу» только маскированные области.
Вопрос, который у меня сейчас возникает, заключается в том, как выяснить, есть ли что-то внутри моей маскированной области (например, кролик, человек, машина и т. Д.) - обратите внимание, что не имеет значения, ЧТО это?только то, что пространство занято.
Я обнаружил, что пространственный фильтр Лапласа производит довольно хорошее визуальное представление о том, что объект находится в многоугольнике или нет (по крайней мере, визуально), но я понятия не имею, что будет дальшешаг будет.Мои мысли состоят в том, чтобы усреднить пиксели в черно-белом изображении, и если они пересекают порог, тогда предположение да, что-то там есть.
Файл, содержащий координаты многоугольника, имеет вид:
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))
Буду очень признателен, если вы дадитемне пример кода того, что делать дальше.