【问题标题】:Checking if the frame already exist in frame list检查框架是否已存在于框架列表中
【发布时间】:2021-01-07 03:36:51
【问题描述】:

我想通过我的网络摄像头捕获所有帧,直到重复任何帧我已经尝试过这种方法,但这给了我错误

if frame not in frame_list: ValueError: 具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()

frame_list = []  #creating the list of frame
while(True):
    ret, frame = cap.read()
    if ret == True:
        if frame not in frame_list:
            frame_list.append(frame)  #This list contain all the frames
        else : break

【问题讨论】:

  • “所有帧”是什么意思?你是什​​么意思比较帧?这应该是精确的像素相等,还是近似相等?
  • 近似可以工作。所有帧表示所有捕获的帧。我将通过网络摄像头逐步更改框架。
  • “所有捕获的帧”是什么意思?你需要更详细地解释你在做什么。您是在捕获特定数量的帧,然后将它们读入列表(这是“所有捕获的帧”对我表示的意思),还是您正在捕获帧,直到您获得与前一帧相同的帧(您的代码似乎表明了什么)?
  • 代码通过旋转的监控摄像头捕获所有帧,直到它获得摄像机在移动时覆盖的所有帧。
  • 相机是否以固定速度旋转?如果是这样,您只需要从视频源中计算出 360 度有多少帧。比较框架以查看您是否一路走来可能是错误的方法。你不会得到两个相同的帧,它们很可能会被移动。此外,照明可以改变,物体可以在您录制的空间中移动。

标签: python list computer-vision numpy-ndarray valueerror


【解决方案1】:

这应该对你有帮助:

present = (any((frame == frame_list).all() for x in frame_list)) #Checks if array is present in list

if present == False:
    frame_list.append(frame)  #This list contain all the frames
else : break

【讨论】:

  • 如果有多个帧,这将非常昂贵。
  • 这个怎么样:present = any(frame is x for x in frame_list)?
  • 我仍然不知道 OP 实际想要做什么,但是如果与许多帧进行比较,我会为每个帧计算一个校验和,比较校验和比比较完整图像便宜.但同样,我不知道 OP 想要做什么,所以我不建议您立即更改答案。
  • @CrisLuengo 好的
猜你喜欢
  • 1970-01-01
  • 2020-08-15
  • 2011-10-09
  • 2019-05-22
  • 2019-08-04
  • 2011-08-31
  • 1970-01-01
  • 2013-03-16
  • 1970-01-01
相关资源
最近更新 更多