メニュー 閉じる

148. PythonのOpenCVを使って動く物体を追跡してみる01

OpenCVのMeanShitを使って動く物体を追跡してみました。まずは、画面の青い枠線内にターゲットの
物体を捕捉します。そして、そのターゲットを動かすと青い枠線が追跡します。
動画撮る時間がなかった・・・。

import numpy as np
import cv2

cap = cv2.VideoCapture (0)

x = 240
y = 135
w = 80
h = 80

track_window = (x, y, w, h)

ret, frame = cap.read ()

frame = cv2.resize(frame, (int(frame.shape[1] / 4), int(frame.shape[0] / 4)))
	
roi = frame[y : y + h, x : x + w]
hsv_roi = cv2.cvtColor (roi, cv2.COLOR_BGR2HSV)
mask = cv2.inRange (hsv_roi, np.array ((0.0, 60.0, 32.0)), np.array ((180.0, 255.0, 255.0)))
roi_hist = cv2.calcHist ([hsv_roi], [0], mask,[180], [0, 180])
cv2.normalize (roi_hist, roi_hist, 0, 255, cv2.NORM_MINMAX)

term_crit = (cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 10, 1)

while (1):

	ret, frame = cap.read ()

	frame = cv2.resize(frame, (int(frame.shape[1] / 4), int(frame.shape[0] / 4)))

	if ret == True:

		hsv = cv2.cvtColor (frame, cv2.COLOR_BGR2HSV)
		dst = cv2.calcBackProject ([hsv], [0], roi_hist, [0,180], 1)

		ret, track_window = cv2.meanShift (dst, track_window, term_crit)

		x, y, w, h = track_window
		img_dst = cv2.rectangle (frame, (x, y), (x + w, y + h), 255, 2)
		cv2.imshow ('SHOW MEANSHIFT IMAGE', img_dst)

		k = cv2.waitKey (1)
		if k == ord ('q'):
			break
	else:
		
		break

 

Posted in python