Мазмұны:

Opencv нысандарын бақылау: 3 қадам
Opencv нысандарын бақылау: 3 қадам

Бейне: Opencv нысандарын бақылау: 3 қадам

Бейне: Opencv нысандарын бақылау: 3 қадам
Бейне: OpenCV Course - Full Tutorial with Python 2024, Қараша
Anonim
Opencv нысандарын бақылау
Opencv нысандарын бақылау

Жылжымалы объектілерді анықтау - бұл компьютерде көру мен суретті өңдеуде қолданылатын әдіс. Бейнеден алынған бірнеше кадрлар әр түрлі әдістермен салыстырылып, қозғалатын объектінің табылғанын анықтайды.

Жылжымалы объектілерді анықтау бейнебақылау, белсенділікті тану, жол жағдайын бақылау, әуежай қауіпсіздігі, теңіз шекарасында қорғаныс мониторингі және т.

Жылжымалы объектілерді анықтау - бұл белгілі бір жерде немесе аймақтағы объектінің физикалық қозғалысын тану. [2] Қозғалатын объектілер мен қозғалмайтын аймақ немесе аймақ арасында сегменттеу арқылы қозғалатын объектілердің қозғалысын бақылап, кейін талдауға болады. Бұған жету үшін, бейне - бұл бір кадрға салынған құрылым, жылжымалы объектіні анықтау - бұл әрбір бейне кадрда немесе қозғалыстағы мақсат бейнеде бірінші көріністі көрсеткенде ғана алдыңғы жоспарлы қозғалатын нысандарды табу.

Мен Opnecv және Python комбинациясын түске негізделген объектілерді анықтау және бақылау үшін қолданамын

1 -қадам: танылған объектіге тіктөртбұрыш салу

егер сіздің компьютеріңізде python немесе opencv болмаса, төмендегі шешілмейтіндерді орындаңыз

мұнда python коды:

nv ретінде cv2import numpy импорттаңыз

cap = cv2. VideoCapture (0)

шындық кезінде:

_, frame = cap.read () hsv = cv2.cvtColor (кадр, cv2. COLOR_BGR2HSV)

төменгі_сары = np.қызық

жоғарғы_сары = np.array ([40, 255, 255])

yellow_mask = cv2.inRange (hsv, төменгі_сары, жоғарғы_сары)

(_, контурлар, _) = cv2.findContours (сары маска, cv2. RETR_TREE, cv2. CHAIN_APPROX_SIMPLE)

контурдағы контур үшін:

ауданы = cv2.contourArea (контур)

егер (ауданы> 800):

x, y, w, h = cv2.boundingRect (contour) frame = cv2.tectangle (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 (орталық_ұпайлар)): b = кездейсоқ.randint (230, 255) g = кездейсоқ.randint (100, 255) r = кездейсоқ.рандинт (100, 255) егер 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 -қадам: Екі кодты да біріктіру

Мен кодты екеуін де біріктіремін

cv2import numpy импорттау жиынынан np кездейсоқ импорт

cap = cv2. VideoCapture (1)

# Объект барған барлық нүктені қадағалау үшін center_points = deque ()

шындық кезінде:

# Жақтауды оқу және аудару _, 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 түсінің төменгі және жоғарғы диапазонын анықтаңыз. Мұнда көк

төменгі_көк = np.аре ([100, 50, 50]) жоғарғы_көк = np.array ([140, 255, 255]) маска = cv2.inRange (hsv, төменгі_көк, жоғарғы_көк)

# Эллиптикалық ядро жасаңыз

ядро = 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:

# Ең үлкен контурды табыңыз ең үлкен_контур = максимум (контурлар, кілт = cv2.contourArea)

# Контурдың ортасын тауып, толтырылған шеңбер сызыңыз

сәттер = cv2.moments (ең үлкен_контур) centre_of_contour = (int (сәттер ['m10'] / сәттер ['m00'])), int (сәттер ['m01'] / сәттер ['m00'])) cv2. шеңбер (кадр, центр_контуры, 5, (0, 0, 255), -1)

# Контурды шеңбермен байлаңыз

эллипс = cv2.fitEllipse (үлкен_контур) cv2.ellipse (жақтау, эллипс, (0, 255, 255), 2)

# Контурдың ортасын сақтаңыз, осылайша біз оны бақылау сызығын жүргіземіз

center_points.appendleft (центр_контуры)

# Контурдың орталық нүктелерінен сызық сызыңыз

i үшін диапазонда (1, len (орталық_ұпайлар)): b = кездейсоқ.рандинт (230, 255) g = кездейсоқ.randint (100, 255) r = кездейсоқ.рандинт (100, 255) егер 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 ()

Ұсынылған: