2014-02-06 2 views
8

VideoCaptureVideoWriter을 사용하여 비디오 파일을 캡처하고 쓰는 방법에 대해 OpenCV의 Python example을 살펴 봤습니다. 그러나 나는 계속 얻고있다 :OpenCV 및 Python을 사용하여 비디오를 기록하는 방법은 무엇입니까?

OpenCV Error: Assertion failed (dst.data == dst0.data) in cvCvtColor, file 
/tmp/opencv-n8PM/opencv-2.4.7.1/modules/imgproc/src/color.cpp, line 4422 
Traceback (most recent call last): 
    File "examples/observer/observer.py", line 17, in <module> 
    video_writer.write(frame) 
cv2.error: /tmp/opencv-n8PM/opencv-2.4.7.1/modules/imgproc/src/color.cpp:4422: error: 
(-215) dst.data == dst0.data in function cvCvtColor 

정리 된 카메라. C에서

#!/usr/bin/env python import cv2 


if __name__ == "__main__": 
    # find the webcam 
    capture = cv2.VideoCapture(0) 

    # video recorder 
    fourcc = cv2.cv.CV_FOURCC(*'XVID') # cv2.VideoWriter_fourcc() does not exist 
    video_writer = cv2.VideoWriter("output.avi", fourcc, 20, (680, 480)) 

    # record video 
    while (capture.isOpened()): 
     ret, frame = capture.read() 
     if ret: 
      video_writer.write(frame) 
      cv2.imshow('Video Stream', frame) 

     else: 
      break 

    capture.release() 
    video_writer.release() 
    cv2.destroyAllWindows() 
+0

작동 했습니까? 답변을 수락하거나 솔루션을 사용하여 게시 할 수 있습니다. –

답변

4

++ 당신이 통과 할 수있는 경우는 -1 코덱 : 여기

는 코드입니다. 그런 다음 기기의 모든 코덱에서 손으로 코덱을 선택할 수 있습니다. 파이썬에서는 같을 수도 있지만 문서에서는 찾을 수 없습니다.

video_writer = cv2.VideoWriter("output.avi", -1, 20, (680, 480)) 

opencv가 컴퓨터에서 XVID를 찾을 수 있는지 확인하십시오.

+2

코덱으로 -1을 전달하면 파이썬에서도 작동합니다. –

8

프레임의 크기는 아마 잘못되었습니다

w=int(capture.get(cv2.cv.CV_CAP_PROP_FRAME_WIDTH)) 
h=int(capture.get(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT)) 
# video recorder 
fourcc = cv2.cv.CV_FOURCC(*'XVID') # cv2.VideoWriter_fourcc() does not exist 
video_writer = cv2.VideoWriter("output.avi", fourcc, 25, (w, h)) 

내가 비슷한 문제에 직면

4

날 위해 일했습니다. 문제가 프레임 크기와 색상의 깊이 또는 사용자 코덱에 있으면 디버깅해야합니다. 빈 배열을 파일에 쓰십시오.

capSize = (100, 100) # this is the size of my source video 
fourcc = cv2.cv.CV_FOURCC('m', 'p', '4', 'v') 
out = cv2.VideoWriter('output.mov',fourcc, 1, capSize) 
... 
out.write(125 * np.ones((100,100,3), np.uint8)) 
...