Съдържание:
- Стъпка 1: Начертаване на правоъгълник върху разпознатия обект
- Стъпка 2: Проследете пътя, по който обектът се е преместил
- Стъпка 3: Интегриране на двата кода
Видео: Проследяване на обекти на Opencv: 3 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:50
Откриването на движещи се обекти е техника, използвана в компютърното зрение и обработка на изображения. Няколко последователни кадъра от видео се сравняват по различни методи, за да се определи дали е открит движещ се обект.
Откриването на движещи се обекти е използвано за широк спектър от приложения като видеонаблюдение, разпознаване на дейности, мониторинг на пътното състояние, безопасност на летището, мониторинг на защитата по морската граница и др.
Откриването на движещ се обект е да разпознава физическото движение на обект в дадено място или регион. [2] Чрез действие на сегментиране между движещи се обекти и неподвижна зона или регион, движението на движещите се обекти може да бъде проследено и по този начин може да бъде анализирано по -късно. За да постигнете това, помислете, че видеото е структура, изградена върху единични кадри, откриването на движещи се обекти е да се намери движещата се цел (и) на преден план, или във всеки видео кадър, или само когато движещата се цел показва първото появяване във видеото.
Ще използвам комбинацията Opnecv и Python за откриване и проследяване на обектите въз основа на цвета
Стъпка 1: Начертаване на правоъгълник върху разпознатия обект
ако вашият компютър няма python или opencv, моля, следвайте това по -долу
ето кода на python:
импортиране на cv2import numpy като np
cap = cv2. VideoCapture (0)
докато е вярно:
_, frame = cap.read () hsv = cv2.cvtColor (frame, cv2. COLOR_BGR2HSV)
по -ниска_жълта = np.array ([20, 110, 110])
горен_жълт = np.array ([40, 255, 255])
жълта_маска = cv2.inRange (hsv, долна_жълта, горна_жълта)
(_, контури, _) = cv2.findContours (жълта_маска, cv2. RETR_TREE, cv2. CHAIN_APPROX_SIMPLE)
за контур в контури:
area = cv2.contourArea (контур)
ако (площ> 800):
x, y, w, h = cv2.boundingRect (контур) рамка = cv2.rectangle (рамка, (x, y), (x+w, y+h), (0, 0, 255), 10)
cv2.imshow ("проследяване", рамка)
k = cv2.waitKey (5) & 0XFF
ако k == 27: прекъсване
cv2.destroyAllWindows ()
cap.release ()
Стъпка 2: Проследете пътя, по който обектът се е преместил
за проследяване на пътя:
за i в обхват (1, len (center_points)): b = random.randint (230, 255) g = random.randint (100, 255) r = random.randint (100, 255) if math.sqrt (((централни точки [i - 1] [0] - централни точки [0]) ** 2) + ((центрови точки [i - 1] [1] - центрови точки [1]) ** 2)) <= 50: cv2.line (рамка, централни точки [i - 1], централни точки , (b, g, r), 4)
Стъпка 3: Интегриране на двата кода
ще интегрирам и двата кода
import cv2import numpy като np импортиране на случаен принцип от колекции импортиране deque
cap = cv2. VideoCapture (1)
# За да следите всички точки, където обектът е посетил center_points = deque ()
докато е вярно:
# Прочетете и обърнете рамката _, рамка = капачка.прочетете () рамка = cv2.flip (рамка, 1)
# Размажете рамката малко
blur_frame = cv2. GaussianBlur (кадър, (7, 7), 0)
# Конвертиране от BGR в HSV цветен формат
hsv = cv2.cvtColor (blur_frame, cv2. COLOR_BGR2HSV)
# Определете долния и горния диапазон на hsv цвят за откриване. Тук синьо
lower_blue = np.array ([100, 50, 50]) upper_blue = np.array ([140, 255, 255]) маска = cv2.inRange (hsv, lower_blue, upper_blue)
# Направете елипсовидно ядро
ядро = cv2.getStructuringElement (cv2. MORPH_ELLIPSE, (15, 15))
# Отваряне на морфа (ерозия, последвана от разширяване)
маска = cv2.morphologyEx (маска, cv2. MORPH_OPEN, ядро)
# Намерете всички контури
контури, йерархия = cv2.findContours (mask.copy (), cv2. RETR_LIST, cv2. CHAIN_APPROX_SIMPLE) [-2:]
ако len (контури)> 0:
# Намерете най -големия контур najveći_контур = макс (контури, ключ = cv2.contourArea)
# Намерете центъра на контура и нарисувайте запълнен кръг
моменти = cv2.моменти (най -голям контур) център_контур = (int (моменти ['m10'] / моменти ['m00']), int (моменти ['m01'] / моменти ['m00']) cv2.circle (кадър, център_контур, 5, (0, 0, 255), -1)
# Свържете контура с кръг
ellipse = cv2.fitEllipse (najveći_контур) cv2.ellipse (рамка, елипса, (0, 255, 255), 2)
# Запазете центъра на контура, за да нарисуваме линия, проследяваща го
center_points.appendleft (centre_of_contour)
# Начертайте линия от централните точки на контура
за i в обхват (1, len (center_points)): b = random.randint (230, 255) g = random.randint (100, 255) r = random.randint (100, 255) if math.sqrt (((централни точки [i - 1] [0] - централни точки [0]) ** 2) + ((центрови точки [i - 1] [1] - центрови точки [1]) ** 2)) <= 50: cv2.line (рамка, централни точки [i - 1], централни точки , (b, g, r), 4)
cv2.imshow ('оригинал', рамка)
cv2.imshow ('маска', маска)
k = cv2.waitKey (5) & 0xFF
ако k == 27: прекъсване
cv2.destroyAllWindows ()
cap.release ()
Препоръчано:
Micro: bit MU Vision Sensor - Проследяване на обекти: 7 стъпки
Micro: bit MU Vision Sensor - Object Tracking: Така че в тази инструкция ще започнем да програмираме Smart Car, който изграждаме в тази инструкция, и че сме инсталирали сензор за MU зрение в тази инструкция. Ние ще програмираме микро: малко с просто проследяване на обекти, така че
Проследяване на обекти въз основа на откриване на цвят: 10 стъпки
Проследяване на обекти въз основа на откриване на цвят: История Направих този проект, за да науча обработката на изображения с помощта на Raspberry PI и отворена автобиография. За да направя този проект по -интересен, използвах два сервомотора SG90 и монтирам камера върху него. Един двигател, използван за хоризонтално движение, и втори двигател, използван за вертикално
Raspberry Pi - Автономен марсоход с проследяване на обекти OpenCV: 7 стъпки (със снимки)
Raspberry Pi - Автономен марсоход с OpenCV проследяване на обекти: Захранва се от Raspberry Pi 3, разпознаване на обекти с отворен CV, ултразвукови сензори и двигатели с постоянен ток. Този роувър може да проследява всеки обект, за който е обучен, и да се движи по всякакъв терен
Плъзгач за камера за проследяване на обекти с ротационна ос. 3D отпечатано и вградено в контролера за DC двигател на RoboClaw и Arduino: 5 стъпки (със снимки)
Плъзгач за камера за проследяване на обекти с ротационна ос. 3D отпечатано и изградено върху RoboClaw DC моторния контролер и Arduino: Този проект е един от любимите ми проекти, откакто съчетах интереса си от създаването на видео с DIY. Винаги съм гледал и исках да подражавам на тези кинематографични кадри във филми, където камера се движи по екрана, докато се движи, за да проследи
WalabotEye - Проследяване на обекти с тактилна обратна връзка: 11 стъпки
WalabotEye - Проследяване на обекти с тактилна обратна връзка: За по -зрението използвайте това, за да имате по -добро разбиране на света около вас