2017-09-08 247 views
0

所以这个代码是随处可见:cv2.VideoCapture(文件),使RET = False,并且帧=无

import numpy as np 
import cv2 

cap = cv2.VideoCapture('C:\\t.mp4') 

# take first frame of the video 
ret,frame = cap.read() 

# setup initial location of window 
r,h,c,w = 200,20,300,20 
track_window = (c,r,w,h) 

# set up the ROI for tracking 
roi = frame[r:r+h, c:c+w] 
hsv_roi = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) 
mask = cv2.inRange(hsv_roi, np.array((0., 60.,32.)),np.array((180.,255.,255.))) 
roi_hist = cv2.calcHist([hsv_roi],[0],mask,[180],[0,180]) 
cv2.normalize(roi_hist,roi_hist,0,255,cv2.NORM_MINMAX) 

# Setup the termination criteria, either 10 iteration or move by at least 1 pt 
term_crit = (cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 10, 1) 

while(1): 
    ret ,frame = cap.read() 

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

     # apply meanshift to get the new location 
     ret, track_window = cv2.meanShift(dst, track_window, term_crit) 

     # Draw it on image 
     x,y,w,h = track_window 
     img2 = cv2.rectangle(frame, (x,y), (x+w,y+h), 255,2) 
     cv2.imshow('img2',img2) 

     k = cv2.waitKey(60) & 0xff 
     if k == 27: 
      break 
     else: 
      cv2.imwrite(chr(k)+".jpg",img2) 

    else: 
     break 

cv2.destroyAllWindows() 
cap.release() 

的事情是,它抛出回这个错误(我使用蟒蛇):

roi = frame[r:r+h, c:c+w] 
TypeError: 'NoneType' object has no attribute '__getitem__' 

重要信息:

是的,一切都是跟上时代的。

- 是的,视频和.py文件是在同一个文件夹(在上面的例子中,我只是把“C:\ ...”,原因很明显)。我试过其他类型的视频扩展(avi,flv,mp4);我试过其他类型的视频扩展(avi,flv,mp4)。没有工作。

- 这是我第一次在这方面工作,我对一切都很陌生。

-I已测试过该视频是否被读取,其中cap.isOpened()返回False因此很明显,这不是代码问题。

我该怎么做,以便我可以使用此代码的任何视频?我应该尝试使用Python吗?

感谢您的任何帮助。

回答

0

我刚刚遇到了同样的问题,直到我找出问题所在,才感到非常沮丧。同样如您所述,print(frame)返回None,而不是像您所期望的像素强度矩阵。这意味着在roi = frame[r:r+h, c:c+w]这一行中没有索引。

你是对的,它不是真的是你的代码问题。更重要的是,这是python无法检索视频的问题。确保您的视频路径正确。即使您的脚本和视频文件位于同一个文件夹中,我也会建议您写出完整路径。

在本教程OpenCV的第一次警告同时适用于视频和图片:https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_gui/py_image_display/py_image_display.html

格式化路径上的一个帖子: Windows path in python

希望这有助于!

相关问题