2017-03-25 82 views
1

我剛剛在我的macOS sierra 10.12.3上安裝了opencv3。我嘗試了一些例子,但是當我嘗試下面的例子時,它會拋出一些例外。我的Python版本是2.7。
我找不出這個問題。有人可以幫我解決這個問題嗎? 我的Python代碼:Python:使用python在OpenCV中測試視頻

import cv2 
import numpy as np 
cap = cv2.VideoCapture("vtest.avi") 

ret, frame1 = cap.read() 
prvs = cv2.cvtColor(frame1,cv2.COLOR_BGR2GRAY) 
hsv = np.zeros_like(frame1) 
hsv[...,1] = 255 

while(1): 
    ret, frame2 = cap.read() 
    next = cv2.cvtColor(frame2,cv2.COLOR_BGR2GRAY) 

    flow = cv2.calcOpticalFlowFarneback(prvs,next, None, 0.5, 3, 15, 3, 5, 1.2, 0) 

    mag, ang = cv2.cartToPolar(flow[...,0], flow[...,1]) 
    hsv[...,0] = ang*180/np.pi/2 
    hsv[...,2] = cv2.normalize(mag,None,0,255,cv2.NORM_MINMAX) 
    rgb = cv2.cvtColor(hsv,cv2.COLOR_HSV2BGR) 

    cv2.imshow('frame2',rgb) 
    k = cv2.waitKey(30) & 0xff 
    if k == 27: 
     break 
    elif k == ord('s'): 
     cv2.imwrite('opticalfb.png',frame2) 
     cv2.imwrite('opticalhsv.png',rgb) 
    prvs = next 

cap.release() 
cv2.destroyAllWindows() 

的錯誤信息是:

OpenCV Error: Assertion failed (scn == 3 || scn == 4) in cvtColor, file /tmp/opencv3-20170324-1646-1ehj5xu/modules/imgproc/src/color.cpp, line 9748 
Traceback (most recent call last): 
    File "/Users/Rouzbeh/BoxSync/Spring2017/TrafficProject/test/test.py", line 6, in <module> 
    prvs = cv2.cvtColor(frame1,cv2.COLOR_BGR2GRAY) 
cv2.error: /tmp/opencv3-20170324-1646-1ehj5xu/modules/imgproc/src/color.cpp:9748: error: (-215) scn == 3 || scn == 4 in function cvtColor 

更新
我有一些問題的ffmpeg格式。但是,它顯示視頻,但最後仍會引發此異常。

+0

它說frame1沒有3通道或4通道。你的視頻灰度? –

+0

它顯示視頻,但在最後拋出此異常。 – RZK

回答

3

這就是,frame1是空的。你應該這樣做:

while(1): 
    ret, frame2 = cap.read() 
    if not ret: 
     break 
    next = cv2.cvtColor(frame2,cv2.COLOR_BGR2GRAY) 
    # rest of code here 
    pass  
+0

非常感謝Quang,它工作 – RZK

2
cap = cv2.VideoCapture("vtest.avi") 
print cap.isOpened() 

,您可以檢查cv2.VideoCapture()功能正常工作

也許你OpenCV不支持因爲視頻結束的FFmpeg

+0

當我打印它時,它表示爲真。還安裝了ffmpeg-2.8。我的攝像頭的VideoCapture可以工作,但它不適用於外部視頻。 – RZK

相關問題