فهرست مطالب:

ردیابی شیء Opencv: 3 مرحله
ردیابی شیء Opencv: 3 مرحله

تصویری: ردیابی شیء Opencv: 3 مرحله

تصویری: ردیابی شیء Opencv: 3 مرحله
تصویری: Eyes Tracking Opencv python 2024, نوامبر
Anonim
ردیابی شیء Opencv
ردیابی شیء Opencv

تشخیص اجسام متحرک روشی است که در بینایی رایانه و پردازش تصویر استفاده می شود. چندین فریم متوالی از یک ویدیو با روش های مختلف مقایسه می شود تا مشخص شود آیا هر جسم متحرک شناسایی شده است یا خیر.

تشخیص اجسام متحرک برای طیف وسیعی از برنامه ها مانند نظارت تصویری ، تشخیص فعالیت ، نظارت بر وضعیت جاده ها ، ایمنی فرودگاه ، نظارت بر حفاظت در امتداد مرز دریایی و غیره استفاده شده است.

تشخیص جسم متحرک برای تشخیص حرکت فیزیکی یک جسم در یک مکان یا منطقه معین است. [2] با عمل تقسیم بندی بین اجسام متحرک و منطقه یا ناحیه ثابت ، حرکت اجسام متحرک را می توان ردیابی کرد و بنابراین بعداً تجزیه و تحلیل شد. برای دستیابی به این هدف ، در نظر بگیرید که یک ویدئو ساختاری است که بر فریم های واحد ساخته شده است ، تشخیص شی متحرک برای یافتن هدف (های) متحرک پیش زمینه ، در هر فریم ویدئویی یا تنها زمانی است که هدف متحرک اولین ظاهر را در ویدئو نشان می دهد.

من قصد دارم از ترکیب Opnecv و Python برای تشخیص و ردیابی اشیاء بر اساس رنگ استفاده کنم

مرحله 1: رسم مستطیل روی شیء شناخته شده

اگر رایانه شما پایتون یا opencv ندارد لطفاً این دستورالعمل زیر را دنبال کنید

اینجا کد پایتون است:

cv2import numpy را به عنوان np وارد کنید

cap = cv2. VideoCapture (0)

در حالی که True:

_ ، frame = cap.read () hsv = cv2.cvtColor (قاب ، cv2. COLOR_BGR2HSV)

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

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

ماسک_زرد = cv2.inRange (hsv ، زرد_پایین ، زرد_بالا)

(_ ، خطوط ، _) = cv2.findContours (ماسک_زرد ، cv2. RETR_TREE ، cv2. CHAIN_APPROX_SIMPLE)

برای کانتور در خطوط:

منطقه = cv2.contourArea (کانتور)

اگر (مساحت> 800):

x ، y ، w ، h = cv2.boundingRect (contour) frame = cv2. rectangle (frame، (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 ((((center_points [i - 1] [0] - center_points [0]) ** 2) + ((center_points [i - 1] [1] - center_points [1]) ** 2)) <= 50: cv2.line (قاب ، نقاط_مرکز [i - 1] ، نقاط مرکز ، (b ، g ، r) ، 4)

مرحله 3: ادغام هر دو کد

من قصد دارم هر دو کد را ادغام کنم

import cv2import numpy به عنوان np واردات تصادفی از مجموعه واردات deque

cap = cv2. فیلم برداری (1)

# برای پیگیری تمام نقاطی که شیء از آنها بازدید کرده است center_points = deque ()

در حالی که True:

# قاب را بخوانید و ورق بزنید _ ، frame = cap.read () frame = 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]) above_blue = np.array ([140، 255، 255]) mask = cv2.inRange (hsv ، آبی زیرین ، آبی بالا)

# هسته بیضوی درست کنید

هسته = cv2.getStructuringElement (cv2. MORPH_ELLIPSE ، (15 ، 15))

# مورف باز (فرسایش به دنبال اتساع)

mask = cv2.morphologyEx (mask، cv2. MORPH_OPEN ، هسته)

# همه خطوط را پیدا کنید

خطوط ، سلسله مراتب = cv2.findContours (mask.copy () ، cv2. RETR_LIST ، cv2. CHAIN_APPROX_SIMPLE) [-2:]

اگر len (خطوط)> 0:

# بزرگترین کانتور را بیابید

# مرکز کانتور را بیابید و دایره پر شده را بکشید

لحظات = cv2.moments (بزرگترین_کنترل) centre_of_contour = (int (لحظات ['m10'] / لحظات ['m00']) ، int (لحظات ['m01'] / لحظه ها ['m00'])) cv2.circle (قاب ، centre_contour ، 5 ، (0 ، 0 ، 255) ، -1)

# کانتور را با دایره محدود کنید

بیضی = cv2.fit

# مرکز کانتور را ذخیره کنید تا خط ردیابی آن را ترسیم کنیم

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 ((((center_points [i - 1] [0] - center_points [0]) ** 2) + ((center_points [i - 1] [1] - center_points [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 ()

توصیه شده: