一级标题(camshift)
在meanshift中存在的问题是,检测窗口是大小不变的,而检测目标在视屏中的位置和大小是在改变的,所以camshift算法,自动调整检测窗口的大小,来适应目标大小的变化。
代码:
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plot
cap=cv.VideoCapture(r"C:\Users\Windows\Desktop\mda-pbcasfstj9kkym08.mp4")
ret,frame=cap.read()
r,h,c,w=200,400,95,400
win=(c,r,w,h)
roi=frame[r:r+h,c:c+w]
hsv_roi=cv.cvtColor(roi,cv.COLOR_BGR2HSV)
roi_hist=cv.calcHist([hsv_roi],[0],None,[180],[0,180])
cv.normalize(roi_hist,roi_hist,0,255,cv.NORM_MINMAX)
term=(cv.TERM_CRITERIA_EPS|cv.TERM_CRITERIA_COUNT,10,1)
while(True):
ret,frame=cap.read()
if ret==True:
hst=cv.cvtColor(frame,cv.COLOR_BGR2HSV)
dst=cv.calcBackProject([hst],[0],roi_hist,[0,180],1)
ret,win=cv.CamShift(dst,win,term)
pts=cv.boxPoints(ret)
pts=np.int0(pts)
img2=cv.polylines(frame,[pts],True,(0,255,0),2)
cv.imshow("frame",frame)
if cv.waitKey(50)&0xFF==ord('q'):
break
cv.release()
cv.destroyAllWindows()
代码在meanshift算法代码的基础上,将meanshift替换为camshift,再将绘图函数进行替换即可。