2017-09-08 254 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

希望這有助於!

相關問題