【问题标题】:How to create multiple VideoCapture Objects如何创建多个 VideoCapture 对象
【发布时间】:2017-02-03 14:49:27
【问题描述】:

我想创建多个 VideoCapture 对象,用于将来自多个摄像头的视频拼接成一个视频混搭。

例如:我有三个视频的路径,我想使用下面显示的 Video Capture 对象读取这些视频,以从各个视频中获取帧,以便它们可以用于写入。

预期:对于 N 个视频路径

   cap0=cv2.VideoCapture(path1)
   cap1=cv2.VideoCapture(path2)
   cap2=cv2.VideoCapture(path3)
   .
   . 
   capn=cv2.VideoCapture(path4)

同样,我也想创建框架对象来读取类似的框架

ret,frame0=cap0.read()
ret,frame1=cap1.read()
.
.
ret,frameN=capn.read()

我尝试在存储路径的列表上使用 for 循环,但每次只读取一个路径并且仅为该特定视频存储帧。我在许多论坛中看到可以在 C++ 中创建多个捕获对象但不是在动态场景中的python中,事先不知道视频数量。 这是我到目前为止的代码

frames=[]
for path in videoList:
    indices=[]
    cap = cv2.VideoCapture(path)

    while(cap.isOpened()):
        ret,frame=cap.read()
        if not ret:
           break
        indices.append(cap.get(1))
    frames.append(indices)
    cap.release()
    cv2.destroyAllWindows()

【问题讨论】:

  • 我对python不太了解,但可能是范围问题?因此,如果您在循环中本地创建 cv2.VideoCapture(pathN),如果您离开循环,它们可能会丢失?你应该分享你的代码来展示你到底做了什么。
  • 在创建第二个之前,您只需创建一个 videocap 并无限循环...

标签: python opencv video video-capture video-processing


【解决方案1】:

我不是 python 程序员,但可能解决方案是这样的:

frames = []
caps = []
for path in videoList:
    caps.append(cv2.VideoCapture(path))

for cap in caps:
    while cap.isOpened():
        ret, frame = cap.read()
        if not ret:
            break
        frames.append(frame)

# now "frames" holds your captured images.

【讨论】:

  • 感谢您的解决方案。
  • 我对其进行了编辑,以便它可以运行并修复了一些错误,希望您不要介意!原始版本仅从每个视频捕获设备中获取第一帧,并且帧列表位于错误的位置:)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-16
  • 2014-10-08
  • 2011-11-21
  • 2017-09-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多