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
如何在python中使用opencv同时播放多个视频?_Python_Opencv - Fatal编程技术网

如何在python中使用opencv同时播放多个视频?

如何在python中使用opencv同时播放多个视频?,python,opencv,Python,Opencv,嗨,伙计们,我被困在这一点上了。我想用opencv在我的屏幕上播放四个视频。有人能帮我怎么做吗?假设我想同时玩 第一,阿维 第二,阿维 第三,阿维 阿维 我指的是以下代码。对于单个avi文件,它表现得非常好。 是否需要连接,或者我可以在四个不同的窗口中运行?。欢迎提出任何建议 进口cv2 将numpy作为np导入 # Create a VideoCapture object and read from input file # If the input is the camera, pass 0

嗨,伙计们,我被困在这一点上了。我想用opencv在我的屏幕上播放四个视频。有人能帮我怎么做吗?假设我想同时玩

  • 第一,阿维
  • 第二,阿维
  • 第三,阿维
  • 阿维
  • 我指的是以下代码。对于单个avi文件,它表现得非常好。 是否需要连接,或者我可以在四个不同的窗口中运行?。欢迎提出任何建议 进口cv2 将numpy作为np导入

    # Create a VideoCapture object and read from input file
    # If the input is the camera, pass 0 instead of the video file name
    cap = cv2.VideoCapture('first.avi')
    cap2 =cv2.VideoCapture('second.avi')
    
    if (cap.isOpened()== False): 
      print("Error opening video stream or file")
    if (cap2.isOpened()== False): 
      print("Error opening video stream or file")
    
    while(cap.isOpened()||cap2.isOpened()):
      # Capture frame-by-frame
      ret, frame = cap.read()
      ret, frame1 = cap2.read()
      if ret == True:
    
       # Display the resulting frame
        cv2.imshow('Frame',frame)
        cv2.imshow('Frame', frame1)
    
    
       # Press Q on keyboard to  exit
       if cv2.waitKey(25) & 0xFF == ord('q'):
      break
      else: 
        break
    
    
    cap.release()
    cap2.release()
    
    cv2.destroyAllWindows()
    

    对于播放多个视频,我们必须为每个视频使用唯一的窗口标题。下面是一个示例代码,演示如何实现它

    import numpy as np
    import cv2
    
    names = ['first.avi', 'second.avi', 'third.avi', 'fourth.avi'];
    window_titles = ['first', 'second', 'third', 'fourth']
    
    
    cap = [cv2.VideoCapture(i) for i in names]
    
    frames = [None] * len(names);
    gray = [None] * len(names);
    ret = [None] * len(names);
    
    while True:
    
        for i,c in enumerate(cap):
            if c is not None:
                ret[i], frames[i] = c.read();
    
    
        for i,f in enumerate(frames):
            if ret[i] is True:
                gray[i] = cv2.cvtColor(f, cv2.COLOR_BGR2GRAY)
                cv2.imshow(window_titles[i], gray[i]);
    
        if cv2.waitKey(1) & 0xFF == ord('q'):
           break
    
    
    for c in cap:
        if c is not None:
            c.release();
    
    cv2.destroyAllWindows()
    

    p.S:这段代码只是一个简单的示例,仅供演示之用。在Ubuntu 14.04上使用python 2和OpenCV 3.2进行测试。

    只需全部读取并显示?我知道,从摄像头捕获时cap=cv2.VideoCapture(0)cap1=cv2.VideoCapure(1)工作正常,但从文件播放视频时,它无法正常工作。我尝试全部读取,但在相同的格式中重叠frame@api55... 我认为OP所说的“重叠”是指来自多个视频的帧按捕获顺序显示在单个窗口中。@sgarizvi这是我的猜测,这就是为什么我在imshow函数中建议使用不同的名称。。。我说的是摄像机而不是视频……有没有可能在同一个窗口中不停顿地播放它们?@Fadolphin。是的,通过在
    cv2.imshow
    调用中为每个图像提供相同的窗口名,这是可能的。另外,我的意见是在
    while
    循环之前,通过分别调用
    cv2.namedWindow
    cv2.resizeWindow
    预先创建窗口并将其调整为固定大小。谢谢先生。你为我的程序节省了大量资源。我使用moviepy将它们合并成一个视频,然后在单个窗口中播放。仅合并开始大约需要60秒。