错误:函数“imwrite”中的 !_img.empty()

Tah*_*dın 7 python opencv python-3.x

我想从名为的视频创建帧project.avi并将它们保存到frameIn文件夹中。但某些类型的错误不让我完成。我怎么解决这个问题。这是代码:

cap = cv2.VideoCapture('project.avi')

currentFrame = 0

while(True):

ret, frame = cap.read()

name = 'frameIn/frame' + str(currentFrame) + '.jpg'
print ("Creating file... " + name)
cv2.imwrite(name, frame)

frames.append(name)

currentFrame += 1

cap.release()
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)

错误是:

Traceback (most recent call last):
  File "videoreader.py", line 28, in <module>
    cv2.imwrite(name, frame)
cv2.error: OpenCV(4.4.0) /private/var/folders/nz/vv4_9tw56nv9k3tkvyszvwg80000gn/T/pip-req-build-2rx9f0ng/opencv/modules/imgcodecs/src/loadsave.cpp:738: error: (-215:Assertion failed) !_img.empty() in function 'imwrite'
Run Code Online (Sandbox Code Playgroud)

小智 10

原因可能是图像为空,因此,您应该在读取帧之前检查天气视频是否正确打开:cap.isOpened()。然后,执行后ret, frame = cap.read()检查ret变量值是否为 true,以确保正确抓取帧。

需要明确的代码:

cap = cv2.VideoCapture('project.avi')
if cap.isOpened():
    current_frame = 0
    while True:
        ret, frame = cap.read()
        if ret:
            name = f'frameIn/frame{current_frame}.jpg'
            print(f"Creating file... {name}")
            cv2.imwrite(name, frame)
            frames.append(name)
        current_frame += 1
    cap.release()
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)

我希望它对你有帮助。