コードはtrain1.mov
ファイルを読み取り、cv2.imshow('res', res)
はoutput.avi
というファイルも保存します。問題は、output.aviは約40kbで空です。しかし、cv2.imshow('res', res)
はビデオ全体を表示します。次に、次のエラーを表示します。OpenCVを使用して保存したビデオをPython(Windows 10)で開くことができません
Pythonのコード:
import numpy as np
import cv2
cap = cv2.VideoCapture('C:\\Users\\khan1\\Desktop\\python project\\color_threshold\\train1.mov')
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('C:\\Users\\khan1\\Desktop\\python project\\color_threshold\\output.avi',fourcc, 20.0, (640,480))
while(cap.isOpened()):
_, frame = cap.read()
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
lower_green = np.array([40, 60, 60])
upper_green = np.array([80, 255, 255])
mask = cv2.inRange(hsv, lower_green, upper_green)
mask = cv2.GaussianBlur(mask, (7, 7), 0)
res = cv2.bitwise_and(frame, frame, mask=mask)
out.write(res)
cv2.namedWindow("res", cv2.WINDOW_NORMAL)
cv2.imshow('res', res)
if (cv2.waitKey(1) & 0xFF) == ord('q'): # Hit `q` to exit
break
# Release everything if job is finished
out.release()
cap.release()
cv2.destroyAllWindows()
エラー:
OpenCV Error: Assertion failed ((scn == 3 || scn == 4) && (depth == CV_8U || depth == CV_32F)) in cv::cvtColor, file C:\build\master_winpack-bindings-win32-vc14-static\opencv\modules\imgproc\src\color.cpp, line 9815
Traceback (most recent call last):
File "C:/Users/khan1/Desktop/python project/color_threshold/savevid.py", line 19, in <module>
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
cv2.error: C:\build\master_winpack-bindings-win32-vc14-static\opencv\modules\imgproc\src\color.cpp:9815: error: (-215) (scn == 3 || scn == 4) && (depth == CV_8U || depth == CV_32F) in function cv::cvtColor
Process finished with exit code 1
私はそれを解決することができますか?
ビデオライターが閉じる前にエラーが発生するので、ムービーには何も書き込まれません。これはビデオの最後のフレームで起こっている可能性があります。 'cap.read()'関数は、フレームがなく、その空のフレームを変換しようとしている可能性がある場合、 'True'または' False'を(無視された変数 '_'に)返します。私。 'cap.isOpened()'は最後のフレームの 'True'ですが、前のループを終了する必要があります。だからあなたは 'retval: else:quit'が必要です。最後の例[here](http://docs.opencv.org/3.1.0/dd/d43/tutorial_py_video_display.html)を参照してください。 –