VideoCapture
とVideoWriter
を使用してビデオファイルをキャプチャして書き出す方法について、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
カメラをクリーンアップしました。
コードは次のとおりです。
#!/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()
フレームのサイズはおそらく正しくありません:
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))
私のために働いた
私も同様の問題に直面しました。問題がフレームサイズと色の深さにあるのか、コーデックにあるのかをデバッグする必要があります。空の配列をファイルに書き込んでみてください。
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))
...
C++では、コーデックに-1を渡すことができる場合。次に、マシン上のすべてのコーデックから手動でコーデックを選択できます。 Pythonでも同じかもしれませんが、ドキュメントにはありません。
video_writer = cv2.VideoWriter("output.avi", -1, 20, (680, 480))
Opencvがマシン上でXVIDを見つけられることを確認してみてください。