2017-03-25 2 views
1

방금 ​​MacOS sierra 10.12.3에 opencv3을 설치했습니다. 몇 가지 예제를 시도했으나 효과가 있었지만 다음 예제를 시도 할 때 예외가 발생합니다. 내 파이썬 버전은 2.7입니다.
나는 문제를 알아낼 수 없다. 아무도이 문제를 도와 줄 수 있습니까? 내 파이썬 코드는 다음과 같습니다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

을 FFmpeg를 지원하지 않습니다. 당신은해야한다 :

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() 기능을 확인할 수 있습니다

어쩌면 당신의 OpenCVframe1가 비어 있기 때문에 비디오의 끝에서의

+0

인쇄 할 때 True라고 표시됩니다. 또한 ffmpeg-2.8이 설치되어 있습니다. 내 웹캠의 VideoCapture는 작동하지만 외부 비디오에서는 작동하지 않습니다. – RZK

관련 문제