Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.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 为什么介绍性OpenCV视频教程中的示例会出现错误?首选的解决方法是什么?_Python_Linux_Opencv_Video - Fatal编程技术网

Python 为什么介绍性OpenCV视频教程中的示例会出现错误?首选的解决方法是什么?

Python 为什么介绍性OpenCV视频教程中的示例会出现错误?首选的解决方法是什么?,python,linux,opencv,video,Python,Linux,Opencv,Video,在测试OpenCV介绍性视频教程中的时,我的视频(.m4v和.mov)在完成后总是会冻结一点,然后抛出以下错误消息: --------------------------------------------------------------------------- error Traceback (most recent call last) <ipython-input-33-6ff11ed068b5> i

在测试OpenCV介绍性视频教程中的时,我的视频(.m4v和.mov)在完成后总是会冻结一点,然后抛出以下错误消息:

---------------------------------------------------------------------------
error                                     Traceback (most recent call last)
<ipython-input-33-6ff11ed068b5> in <module>()
     15 
     16     # Our operations on the frame come here
---> 17     gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
     18 
     19     # Display the resulting frame

error: /home/user/opencv-2.4.9/modules/imgproc/src/color.cpp:3737: error: (-215) scn == 3 || scn == 4 in function cvtColor

由于我最终想在某些场合循环播放视频,以下内容对我来说是最好的解决方案

import numpy as np
import cv2

cap = cv2.VideoCapture('/path/to/vid.mp4') 
frame_counter = 0
loop = True
while(True):
    # Capture frame-by-frame
    ret, frame = cap.read()
    # Our operations on the frame come here
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    # Display the resulting frame
    cv2.imshow('frame',gray)
    frame_counter += 1
    if frame_counter == cap.get(cv2.cv.CV_CAP_PROP_FRAME_COUNT):
        if loop == True:
            frame_counter = 0
            cap = cv2.VideoCapture(video_name)
        else:
            break
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
cap.release()
cv2.destroyAllWindows()
如果不需要循环播放视频,只需使用

if frame_counter == cap.get(cv2.cv.CV_CAP_PROP_FRAME_COUNT):
    break
或Padraic的溶液(稍加修改)

try/except语句确实提供了一个短暂的延迟,视频在关闭前冻结。播放完成后,if语句将立即关闭它

我仍然感兴趣的是,如果有人能够解释,而错误消息是在第一时间遇到的,因为padraic说,这不是他的机器上的情况


编辑:所以我注意到我误读了教程,应该使用
while(cap.isOpened())
而不是
while(True)
,但是我仍然在
while(cap.isOpened())

中遇到同样的错误。是的,自从我发布之后,我尝试了ogv、mp4和avi。它们都给出相同的错误消息。我正在使用Ipython笔记本,以防出现问题,我会将其添加到问题中。抛出错误消息后,我还必须强制关闭视频。我也可以重新运行脚本和冻结的视频将变得活跃,并开始再次播放。之后,我从源代码处通过anaconda和opencv安装了python。我想这不是一个大问题,但我很好奇为什么会发生这种情况,如果可能的话,我想摆脱它。是的,我在spyder中尝试从ipython控制台运行,但遇到了相同的错误。这可能是因为我的相机驱动程序,即使我不是从相机拍摄?
if frame_counter == cap.get(cv2.cv.CV_CAP_PROP_FRAME_COUNT):
    break
try:
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
except cv2.error:
    break