Daftar Isi:

Pelacakan Objek Opencv: 3 Langkah
Pelacakan Objek Opencv: 3 Langkah

Video: Pelacakan Objek Opencv: 3 Langkah

Video: Pelacakan Objek Opencv: 3 Langkah
Video: Tutorial OpenCV basic Object Tracking 2024, November
Anonim
Pelacakan Objek Opencv
Pelacakan Objek Opencv

Deteksi objek bergerak adalah teknik yang digunakan dalam visi komputer dan pemrosesan gambar. Beberapa frame berurutan dari video dibandingkan dengan berbagai metode untuk menentukan apakah ada objek bergerak yang terdeteksi.

Deteksi objek bergerak telah digunakan untuk berbagai aplikasi seperti pengawasan video, pengenalan aktivitas, pemantauan kondisi jalan, keamanan bandara, pemantauan perlindungan di sepanjang perbatasan laut dan lain-lain.

Deteksi objek bergerak adalah untuk mengenali pergerakan fisik suatu objek di suatu tempat atau wilayah tertentu.[2] Dengan melakukan segmentasi antara objek bergerak dan area atau wilayah diam, gerakan objek bergerak dapat dilacak dan dengan demikian dapat dianalisis nanti. Untuk mencapai ini, anggap video adalah struktur yang dibangun di atas bingkai tunggal, deteksi objek bergerak adalah menemukan target bergerak di latar depan, baik di setiap bingkai video atau hanya ketika target bergerak menunjukkan penampilan pertama dalam video.

Saya akan menggunakan kombinasi Opnecv dan Python untuk mendeteksi dan melacak objek berdasarkan warnanya

Langkah 1: Menggambar Persegi Panjang pada Objek yang Diakui

jika pc Anda tidak memiliki python atau opencv, ikuti instruksi di bawah ini

ini kode pythonnya:

impor cv2import numpy sebagai np

tutup = cv2. VideoCapture(0)

sementara Benar:

_, bingkai = cap.read() hsv = cv2.cvtColor(bingkai, cv2. COLOR_BGR2HSV)

lower_yellow = np.array([20, 110, 110])

upper_yellow = np.array([40, 255, 255])

yellow_mask = cv2.inRange(hsv, lower_yellow, upper_yellow)

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

untuk kontur dalam kontur:

luas = cv2.contourArea(kontur)

jika (luas > 800):

x, y, w, h = cv2.boundingRect(kontur) frame = cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 0, 255), 10)

cv2.imshow("pelacakan", bingkai)

k = cv2.waitKey(5) & 0XFF

jika k == 27: break

cv2.destroySemuaWindows()

tutup.rilis()

Langkah 2: Menelusuri Jalur Di Mana Objek Telah Bergerak

untuk melacak jalur:

untuk 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(bingkai, titik_pusat[i - 1], titik_pusat, (b, g, r), 4)

Langkah 3: Mengintegrasikan Kedua Kode

saya akan mengintegrasikan kedua kode

import cv2import numpy as np import random from collections import deque

tutup = cv2. VideoCapture(1)

# Untuk melacak semua titik di mana objek dikunjungi center_points = deque()

sementara Benar:

# Membaca dan membalik frame _, frame = cap.read() frame = cv2.flip(frame, 1)

# Buramkan bingkai sedikit

blur_frame = cv2. GaussianBlur(bingkai, (7, 7), 0)

# Konversi dari format warna BGR ke HSV

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

# Tentukan rentang warna hsv yang lebih rendah dan lebih tinggi untuk dideteksi. Biru di sini

lower_blue = np.array([100, 50, 50]) upper_blue = np.array([140, 255, 255]) mask = cv2.inRange(hsv, lower_blue, upper_blue)

# Buat kernel elips

kernel = cv2.getStructuringElement(cv2. MORPH_ELLIPSE, (15, 15))

# Morf pembukaan (erosi diikuti oleh pelebaran)

topeng = cv2.morphologyEx(masker, cv2. MORPH_OPEN, kernel)

# Temukan semua kontur

kontur, hierarki = cv2.findContours(mask.copy(), cv2. RETR_LIST, cv2. CHAIN_APPROX_SIMPLE)[-2:]

jika len(kontur) > 0:

# Temukan kontur terbesar terbesar_kontur = max(kontur, kunci=cv2.contourArea)

# Temukan pusat kontur dan gambar lingkaran penuh

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

# Ikat kontur dengan lingkaran

elips = cv2.fitEllipse(kontur_terbesar) cv2.ellipse(bingkai, elips, (0, 255, 255), 2)

# Simpan bagian tengah kontur sehingga kami menggambar garis yang melacaknya

center_points.appendleft(center_of_contour)

# Gambar garis dari titik tengah kontur

untuk 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(bingkai, titik_pusat[i - 1], titik_pusat, (b, g, r), 4)

cv2.imshow('asli', bingkai)

cv2.imshow('topeng', topeng)

k = cv2.waitKey(5) & 0xFF

jika k == 27: break

cv2.destroySemuaWindows()

tutup.rilis()

Direkomendasikan: