```python
import numpy as up
import cv2 as cv
cap = cv.VideoCapture('C:\\Users\\86185\\Desktop\\12.15\\MAH02609')
ret,frame = cap.read()
r,h,c,w=197,141,0,208
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.calcBackProjest([hst],[0],roi_hist,[0,180])
ret,win = cv.meanShift(dst,win,term)
x,y,w,h = win
img2 = cv.rectangle(frame,(x,y),(x+w,y+h),255,2)
cv.imshow("frame",img2)
if cv.waitkey(60)&0xFF ==ord('q'):
break
cap.release()
cv.destroyAllWindows()
报错:
TypeError Traceback (most recent call last)
<ipython-input-1-a694586b6da1> in <module>()
7 r,h,c,w=197,141,0,208
8 win = (c,r,w,h)
----> 9 roi = frame[r:r+h,c:c+w]
10
11 hsv_roi = cv.cvtColor(roi,cv.COLOR_BGR2HSV)
TypeError: 'NoneType' object is not subscriptable
估计是数据溢出了。
ROI 未作溢出处理,如果 r+h, c+w 大于读取视频图像的宽度和高度,就会出错。
参见:https://blog.csdn.net/youcans/article/details/121234811(不是这个问题,但原理类似)
x,y = 300,50 # 叠放位置
W1, H1 = imgL.shape[1::-1] # 大图尺寸
W2, H2 = imgS.shape[1::-1] # 小图尺寸
if (x + W2) > W1: x = W1 - W2 # 调整图像叠放位置,避免溢出
if (y + H2) > H1: y = H1 - H2