天津微信網(wǎng)站本地推廣最好用的平臺
目錄
原理
做法
代碼實現(xiàn)
結(jié)果展示
原理
做法
代碼實現(xiàn)
import numpy as np
import cv2 as cv# 讀取視頻
cap = cv.VideoCapture('video.mp4')# 檢查視頻是否成功打開
if not cap.isOpened():print("Error: Cannot open video file.")exit()# 獲取第一幀圖像,并指定目標(biāo)位置
ret, frame = cap.read()# 目標(biāo)位置
x, y, w, h = 960,500, 100, 100
track_window = (x, y, w, h)# 指定目標(biāo)的感興趣區(qū)域
roi = frame[y:y+h, x:x+w]# 轉(zhuǎn)換感興趣區(qū)域的顏色空間(HSV)
hsv_roi = cv.cvtColor(roi, cv.COLOR_BGR2HSV)# 計算感興趣區(qū)域的直方圖
roi_hist = cv.calcHist([hsv_roi], [0], None, [180], [0, 180])# 歸一化直方圖
cv.normalize(roi_hist, roi_hist, 0, 255, cv.NORM_MINMAX)# 設(shè)置目標(biāo)追蹤的停止條件
term_crit = (cv.TERM_CRITERIA_EPS | cv.TERM_CRITERIA_COUNT, 10, 1)while True:# 獲取每一幀圖像ret, frame = cap.read()if not ret:break# 轉(zhuǎn)換當(dāng)前幀的顏色空間(HSV)hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)# 計算直方圖的反向投影dst = cv.calcBackProject([hsv], [0], roi_hist, [0, 180], 1)# 使用meanshift追蹤ret, track_window = cv.CamShift(dst, track_window, term_crit)# 繪制追蹤結(jié)果pts = cv.boxPoints(ret)pts = np.int0(pts)img2 = cv.polylines(frame, [pts],True,255,2)cv.imshow('frame', img2)if cv.waitKey(60) & 0xFF == ord('q'):breakcap.release()
cv.destroyAllWindows()
結(jié)果展示
追蹤結(jié)果1