İçindekiler:

Opencv Nesne Takibi: 3 Adım
Opencv Nesne Takibi: 3 Adım

Video: Opencv Nesne Takibi: 3 Adım

Video: Opencv Nesne Takibi: 3 Adım
Video: NesneTakibi (OpenCV) - Object Tracking 2024, Kasım
Anonim
Opencv Nesne Takibi
Opencv Nesne Takibi

Hareketli nesne algılama, bilgisayarla görme ve görüntü işlemede kullanılan bir tekniktir. Bir videodan gelen birden fazla ardışık kare, herhangi bir hareketli nesnenin algılanıp algılanmadığını belirlemek için çeşitli yöntemlerle karşılaştırılır.

Hareketli nesnelerin tespiti, video gözetimi, aktivite tanıma, yol durumu izleme, havaalanı güvenliği, deniz sınırı boyunca koruma izleme vb. gibi çok çeşitli uygulamalar için kullanılmıştır.

Hareketli nesne algılama, belirli bir yer veya bölgedeki bir nesnenin fiziksel hareketini tanımaktır.[2] Hareketli nesneler ve sabit alan veya bölge arasında bölütleme yaparak, hareketli nesnelerin hareketi izlenebilir ve böylece daha sonra analiz edilebilir. Bunu başarmak için, bir videoyu tek kareler üzerine inşa edilmiş bir yapı olarak düşünün, hareketli nesne algılama, her video karesinde veya yalnızca hareketli hedef videoda ilk görünümü gösterdiğinde ön plandaki hareketli hedefleri bulmaktır.

Renge göre nesneleri algılamak ve izlemek için Opnecv ve Python kombinasyonunu kullanacağım

Adım 1: Tanınan Nesneye Dikdörtgen Çizmek

PC'nizde python veya opencv yoksa lütfen aşağıdaki talimatları izleyin

işte piton kodu:

cv2import numpy'yi np olarak içe aktar

cap = cv2. VideoCapture(0)

Doğru iken:

_, çerçeve = cap.read() hsv = cv2.cvtColor(çerçeve, cv2. COLOR_BGR2HSV)

alt_yellow = np.dizi([20, 110, 110])

üst_yellow = np.dizi([40, 255, 255])

yellow_mask = cv2.inRange(hsv, alt_yellow, üst_yellow)

(_, konturlar, _) = cv2.findContours(yellow_mask, cv2. RETR_TREE, cv2. CHAIN_APPROX_SIMPLE)

konturlarda kontur için:

alan = cv2.contourArea(kontur)

if(alan > 800):

x, y, w, h = cv2.sınırlamaDik(kontur) çerçevesi = cv2.dikdörtgen(çerçeve, (x, y), (x+w, y+h), (0, 0, 255), 10)

cv2.imshow("izleme", çerçeve)

k = cv2.waitKey(5) & 0XFF

k == 27 ise: ara

cv2.destroyAllWindows()

cap.release()

2. Adım: Cismin Hareket Ettiği Yolun İzini Çıkarın

yolu izlemek için:

i için aralık(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(çerçeve, merkez_noktaları[i - 1], merkez_noktaları, (b, g, r), 4)

Adım 3: Her İki Kodu da Entegre Etme

her iki kodu da entegre edeceğim

cv2import numpy'yi np olarak içe aktar koleksiyonlardan rastgele içe aktar

cap = cv2. VideoCapture(1)

# Nesnenin ziyaret ettiği tüm noktaları takip etmek için center_points = deque()

Doğru iken:

# Çerçeveyi oku ve çevir _, çerçeve = cap.read() çerçeve = cv2.flip(çerçeve, 1)

# Çerçeveyi biraz bulanıklaştırın

blur_frame = cv2. GaussianBlur(çerçeve, (7, 7), 0)

# BGR'den HSV renk formatına dönüştürme

hsv = cv2.cvtColor(blur_frame, cv2. COLOR_BGR2HSV)

# Algılanacak hsv renginin alt ve üst aralığını tanımlayın. Burada mavi

alt_mavi = np.array([100, 50, 50]) üst_mavi = np.array([140, 255, 255]) mask = cv2.inRange(hsv, alt_mavi, üst_mavi)

# Eliptik çekirdek yapın

çekirdek = cv2.getStructuringElement(cv2. MORPH_ELLIPSE, (15, 15))

# Açılış morfu (erozyon ve ardından genişleme)

maske = cv2.morphologyEx(maske, cv2. MORPH_OPEN, çekirdek)

# Tüm konturları bul

konturlar, hiyerarşi = cv2.findContours(mask.copy(), cv2. RETR_LIST, cv2. CHAIN_APPROX_SIMPLE)[-2:]

len(konturlar) > 0 ise:

# En büyük konturu bulun en büyük_contour = max(contours, key=cv2.contourArea)

# Konturun merkezini bulun ve dolu daire çizin

momentler = cv2.moments(biggest_contour) center_of_contour = (int(moments['m10'] / momentler['m00']), int(moments['m01'] / momentler['m00'])) cv2.circle(frame, kontur merkezi, 5, (0, 0, 255), -1)

# Konturu daire ile bağla

elips = cv2.fitEllipse(biggest_contour) cv2.ellipse(çerçeve, elips, (0, 255, 255), 2)

# Konturun merkezini kaydedin, böylece onu takip eden çizgi çizelim

center_points.appendleft(centre_of_contour)

# Konturun merkez noktalarından çizgi çizin

i için aralık(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(çerçeve, merkez_noktaları[i - 1], merkez_noktaları, (b, g, r), 4)

cv2.imshow('orijinal', çerçeve)

cv2.imshow('maske', maske)

k = cv2.waitKey(5) & 0xFF

k == 27 ise: ara

cv2.destroyAllWindows()

cap.release()

Önerilen: