Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python cv2.error:完成视频播放后出现OpenCV(3.4.3)错误_Python_Opencv - Fatal编程技术网

Python cv2.error:完成视频播放后出现OpenCV(3.4.3)错误

Python cv2.error:完成视频播放后出现OpenCV(3.4.3)错误,python,opencv,Python,Opencv,我想读取现有视频,将其转换为灰度并播放灰度视频。代码如下 import cv2 import numpy as np # read the video cap = cv2.VideoCapture('input.avi') while(True): ret, frame = cap.read() # convert it into grayscale gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) cv2.ims

我想读取现有视频,将其转换为灰度并播放灰度视频。代码如下

import cv2
import numpy as np

# read the video
cap = cv2.VideoCapture('input.avi')

while(True):
    ret, frame = cap.read()

    # convert it into grayscale
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    cv2.imshow('frame',gray)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
cv2.destroyAllWindows()
灰度视频一直播放到最后。播放完成后,会弹出以下错误-

Traceback (most recent call last):
  File "D:\L1.py", line 11, in <module>
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.error: OpenCV(3.4.3) C:\projects\opencv-python\opencv\modules\imgproc\src\color.cpp:181: error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'
回溯(最近一次呼叫最后一次):
文件“D:\L1.py”,第11行,在
灰色=cv2.CVT颜色(边框,cv2.COLOR\u BGR2GRAY)
cv2.error:OpenCV(3.4.3)C:\projects\opencvpython\OpenCV\modules\imgproc\src\color.cpp:181:error:(-215:断言失败)_函数“cv::cvtColor”中的src.empty()
为什么会出现这种错误?有什么解决办法吗


我正在使用python 3.6和opencv 3.4,循环将在视频结束后继续尝试获取帧。您可以检查
cap
是否返回图像,或者是否如下图所示中断。另外,别忘了发布视频

import cv2
import numpy as np

# read the video
cap = cv2.VideoCapture('input.avi')

while(cap.isOpened()):
    ret, frame = cap.read()

    if ret:
        # convert it into grayscale
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        cv2.imshow('frame',gray)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    else:
        break

cap.release()
cv2.destroyAllWindows()

循环将在视频结束后继续尝试获取帧。您可以检查
cap
是否返回图像,或者是否如下图所示中断。另外,别忘了发布视频

import cv2
import numpy as np

# read the video
cap = cv2.VideoCapture('input.avi')

while(cap.isOpened()):
    ret, frame = cap.read()

    if ret:
        # convert it into grayscale
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        cv2.imshow('frame',gray)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    else:
        break

cap.release()
cv2.destroyAllWindows()

我喜欢OpenCV教程都从
cap.read()
中获取返回值,但不必检查它。读取最后一帧后,程序将返回并尝试读取另一帧。那里没有一个,因此它为
frame
返回
None
,为布尔
ret
返回
False
。检查其中任何一个并在检测到其中一个时中断循环将解决您的问题。我喜欢OpenCV教程都从
cap.read()
获取返回值,但不必费心检查它。读取最后一帧后,程序将返回并尝试读取另一帧。那里没有一个,因此它为
frame
返回
None
,为布尔
ret
返回
False
。检查其中任何一个,如果检测到其中一个,则中断循环将解决您的问题。您应该提交此文件。它比他们的版本要好得多,并且肯定会为尝试学习教程的人节省很多麻烦。谢谢,可以。但奇怪的是,我看到他们在“保存视频”部分检查
ret
,而不是在“从文件播放视频”部分。我想知道
while(cap.isOpened()):
过去是否足够。如果我没记错的话,
cap.isOpened()
即使在读取最后一帧之后(直到调用
cap.release()
),仍然是真的,所以您仍然需要检查
ret
。我并没有注意到,为了保存视频,他们对其进行了不同的编码。真有趣。:)你应该提交这个。它比他们的版本要好得多,并且肯定会为尝试学习教程的人节省很多麻烦。谢谢,可以。但奇怪的是,我看到他们在“保存视频”部分检查
ret
,而不是在“从文件播放视频”部分。我想知道
while(cap.isOpened()):
过去是否足够。如果我没记错的话,
cap.isOpened()
即使在读取最后一帧之后(直到调用
cap.release()
),仍然是真的,所以您仍然需要检查
ret
。我并没有注意到,为了保存视频,他们对其进行了不同的编码。真有趣。:)