Spisu treści:
2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-01-23 15:02
Wykrywanie poruszających się obiektów to technika stosowana w wizji komputerowej i przetwarzaniu obrazu. Wiele kolejnych klatek z filmu jest porównywanych różnymi metodami w celu określenia, czy wykryto jakikolwiek poruszający się obiekt.
Wykrywanie poruszających się obiektów jest wykorzystywane w szerokim zakresie zastosowań, takich jak nadzór wideo, rozpoznawanie aktywności, monitorowanie stanu dróg, bezpieczeństwo na lotniskach, monitorowanie ochrony wzdłuż granicy morskiej itp.
Wykrywanie poruszającego się obiektu polega na rozpoznaniu fizycznego ruchu obiektu w danym miejscu lub regionie.[2] Działając na segmentację pomiędzy poruszającymi się obiektami a nieruchomym obszarem lub regionem, ruch poruszających się obiektów może być śledzony, a zatem może być później analizowany. Aby to osiągnąć, weź pod uwagę, że wideo jest strukturą zbudowaną z pojedynczych klatek, wykrywanie ruchomych obiektów polega na znalezieniu ruchomego celu na pierwszym planie, w każdej klatce wideo lub tylko wtedy, gdy ruchomy cel pokazuje pierwszy wygląd na wideo.
Zamierzam użyć kombinacji Opnecv i Pythona do wykrywania i śledzenia obiektów na podstawie koloru
Krok 1: Rysowanie prostokąta na rozpoznanym obiekcie
jeśli twój komputer nie ma Pythona lub opencv, postępuj zgodnie z poniższymi instrukcjami
oto kod Pythona:
importuj cv2import numpy jako np
cap = cv2. VideoCapture(0)
podczas gdy prawda:
_, ramka = cap.read() hsv = cv2.cvtColor(ramka, cv2. COLOR_BGR2HSV)
dolny_żółty = np. tablica ([20, 110, 110])
górny_żółty = np. tablica ([40, 255, 255])
żółta_maska = cv2.inRange(hsv, dolna_żółta, górna_żółta)
(_, kontury, _) = cv2.findContours(żółta_maska, cv2. RETR_TREE, cv2. CHAIN_APPROX_SIMPLE)
dla konturu w konturach:
powierzchnia = cv2.contourArea(kontur)
jeśli (obszar > 800):
x, y, w, h = cv2.boundingRect(contour) frame = cv2.rectangle(ramka, (x, y), (x+w, y+h), (0, 0, 255), 10)
cv2.imshow("śledzenie", ramka)
k = cv2.waitKey(5) i 0XFF
jeśli k == 27: przerwa
cv2.zniszczWszystkieOkna()
cap.zwolnienie()
Krok 2: Wyznacz ścieżkę, po której poruszał się obiekt
aby prześledzić ścieżkę:
dla i in range(1, len(center_points)): b = random.randint(230, 255) g = random.randint(100, 255) r = random.randint(100, 255) if math.sqrt(((() center_points[i - 1][0] - center_points[0]) ** 2) + ((center_points[i - 1][1] - center_points[1]) ** 2)) <= 50: cv2.line(ramka, center_points[i - 1], center_points, (b, g, r), 4)
Krok 3: Integracja obu kodów
zamierzam zintegrować oba kody
import cv2import numpy as np import random z kolekcji import deque
cap = cv2. VideoCapture(1)
# Aby śledzić wszystkie punkty, w których obiekt odwiedził center_points = deque()
podczas gdy prawda:
# Odczytaj i odwróć ramkę _, ramka = cap.read() frame = cv2.flip(ramka, 1)
# Rozmyj trochę ramkę
blur_frame = cv2. GaussianBlur(ramka, (7, 7), 0)
# Konwertuj z formatu BGR na HSV
hsv = cv2.cvtColor(rozmycie_ramki, cv2. KOLOR_BGR2HSV)
# Zdefiniuj dolny i górny zakres kolorów hsv do wykrycia. Niebieski tutaj
dolny_niebieski = np. tablica([100, 50, 50]) górny_niebieski = np. tablica([140, 255, 255]) maska = cv2.inRange(hsv, dolny_niebieski, górny_niebieski)
# Stwórz jądro eliptyczne
kernel = cv2.getStructuringElement(cv2. MORPH_ELLIPSE, (15, 15))
# Morf otwarcia (erozja, a następnie rozszerzenie)
maska = cv2.morphologyEx(maska, cv2. MORPH_OPEN, jądro)
# Znajdź wszystkie kontury
kontury, hierarchia = cv2.findContours(maska.copy(), cv2. RETR_LIST, cv2. CHAIN_APPROX_SIMPLE)[-2:]
jeśli len(kontury) > 0:
# Znajdź największy kontur large_contour = max(contours, key=cv2.contourArea)
# Znajdź środek konturu i narysuj wypełniony okrąg
momenty = cv2.moments(największy_kontur) center_of_contour = (int(momenty['m10'] / momenty['m00']), int(momenty['m01'] / momenty['m00'])) cv2.circle(ramka, środek_konturu, 5, (0, 0, 255), -1)
# Związany kontur kółkiem
ellipse = cv2.fitEllipse(biggest_contour) cv2.ellipse(ramka, elipsa, (0, 255, 255), 2)
# Zapisz środek konturu, aby narysować linię śledząc ją
center_points.appendleft(środek_konturu)
# Narysuj linię od środkowych punktów konturu
dla i in range(1, len(center_points)): b = random.randint(230, 255) g = random.randint(100, 255) r = random.randint(100, 255) if math.sqrt(((() center_points[i - 1][0] - center_points[0]) ** 2) + ((center_points[i - 1][1] - center_points[1]) ** 2)) <= 50: cv2.line(ramka, center_points[i - 1], center_points, (b, g, r), 4)
cv2.imshow('oryginalny', ramka)
cv2.imshow('maska', maska)
k = cv2.waitKey(5) i 0xFF
jeśli k == 27: przerwa
cv2.zniszczWszystkieOkna()
cap.zwolnienie()
Zalecana:
Czujnik wizyjny Micro:bit MU - śledzenie obiektów: 7 kroków
Micro:bit MU Vision Sensor - Śledzenie obiektów: Więc w tej instrukcji zaczniemy programować inteligentny samochód, który zbudowaliśmy w tej instrukcji i na którym zainstalowaliśmy czujnik wizyjny MU w tej instrukcji. Zaprogramujemy mikro: trochę z prostym śledzeniem obiektów, więc
Czujnik wizyjny Micro:bit MU - śledzenie obiektów: 6 kroków
Micro:bit MU Vision Sensor - Tracking Objects: To jest mój czwarty przewodnik po czujniku wizyjnym MU dla micro:bit. Tutaj omówię, jak śledzić obiekty za pomocą micro:bit i zapisywać współrzędne na ekranie OLED. Mam w innych moich przewodnikach, jak podłączyć micro:bit do
Śledzenie obiektów w oparciu o wykrywanie kolorów: 10 kroków
Śledzenie obiektów w oparciu o wykrywanie kolorów: historia Zrobiłem ten projekt, aby nauczyć się przetwarzania obrazu za pomocą Raspberry PI i otwartego CV. Aby uatrakcyjnić ten projekt użyłem dwóch silników SG90 Servo i zamontowałem na nim kamerę. Jeden silnik służy do poruszania się w poziomie, a drugi do poruszania się w pionie
WalabotEye - śledzenie obiektów z dotykowym sprzężeniem zwrotnym: 11 kroków
WalabotEye - śledzenie obiektów z dotykowym sprzężeniem zwrotnym: dla osób niedowidzących użyj tego, aby lepiej zrozumieć otaczający Cię świat
Śledzenie obiektów - kontrola montażu kamery: 4 kroki
Śledzenie obiektów - kontrola montażu kamery: Witam wszystkich, w tej instrukcji pokażę ci postępy poczynione w moim projekcie śledzenia obiektów. Tutaj znajdziesz poprzednią instrukcję: https://www.instructables.com/id/Object-Tracking/ a tutaj możesz znaleźć listy odtwarzania na youtube ze wszystkimi t