当前位置: 首页 > 知识库问答 >
问题:

在python中从视频导入大量图像的有效方法

支阳波
2023-03-14

我目前正在为一个计算机视觉问题制作一个数据集。我想在之前的数据中添加一些数据。所以我想从2个不同的视频中获得大约3000帧。

我使用openCV是因为我知道捕获功能,但我不确定这一点,因为我的内存正在爆炸。我对之前已经处理过的数据集使用pickle文件,我的内存中有这么多信息,这一点没有问题。也许我的代码是可怕的,没有注意到它。。。

以下是我从视频中获得大约3000帧的代码:

import cv2
video_name1 = "videosDataset/AMAZExNHORMS2019_Lo-res.mp4"

video_name2 = "videosDataset/CAMILLATHULINS2019_Lo-res.mp4"

def getAllFrames(videoName):
    video_name = videoName
    property_id =int(cv2.CAP_PROP_FRAME_COUNT)
    cap = cv2.VideoCapture(video_name) #video_name is the video being called
    frames = []
    length = int(cv2.VideoCapture.get(cap, property_id))
    print(length)
    minL = int(length/2)
    maxL = int(2*length/3)
    print(minL,maxL)
    for i in range(minL,maxL):
        cap.set(1,i); # Where frame_no is the frame you want
        ret, frame = cap.read() # Read the frame
        frames.append(frame)
        print(str(round((i-minL)/(maxL-minL)*100, 2))+'%')
    return frames

frames1 = getAllFrames(video_name1)

我想知道是否有更好的方法来做到这一点。非常感谢。

共有2个答案

胡越
2023-03-14

假设通过创建数据集,您的意思是希望单独保存所有帧以便在数据集中使用,最简单的选择可能是使用ffmpeg之类的工具来实现。请参见此处,以获取执行此操作的示例。Ffmpeg将支持多种图像文件格式,可能包括要保存图像的格式。

屈翰飞
2023-03-14

这里的问题是压缩-读取时,每个帧都存储为numpy数组,这相当昂贵。例如,一个1280 x 720像素的RGB帧在jpg格式中约为200 kB,在png格式中约为1.2 MB,在numpy uint8阵列中存储时为2.7 MB,在numpy float64阵列中存储时为22 MB。最简单的解决方案是将每个帧作为jpg映像(例如,通过cv2.imwrite)存储到磁盘,而不是创建包含所有帧的数组。

 类似资料:
  • 注意:对于 Photoshop CC 之前的 Photoshop 版本,只有当您拥有 Photoshop Extended 时,本文所讨论的某些功能才可能可用。Photoshop 不提供单独的 Extended 版本。Photoshop Extended 中的所有功能是 Photoshop 的一部分。 打开或导入视频文件 在 Photoshop 中,可以直接打开视频文件或向打开的文档添加视频。导入

  • 我尝试用Python3.6和Jupyter笔记本导入png文件,但没有成功。我见过一些不起作用的例子,至少现在不起作用了,例如。 没有名为Image的模块可以安装:conda安装镜像或pip安装镜像 任何简单的解决方案都将不胜感激!

  • 关于创建视频图像 Photoshop 可以创建具有各种长宽比的图像,以便它们能够在设备(如视频显示器)上正确显示。可以选择特定的视频选项(使用“新建”对话框)以便对将最终图像合并到视频中时进行的缩放提供补偿。 安全区域 “胶片和视频”预设还会创建带有非打印参考线的文档,参考线可画出图像的动作安全区域和标题安全区域的轮廓。使用“大小”菜单中的选项,可以生成用于特定视频系统(NTSC、PAL 或 HD

  • 我抓取了Twitter数据,但没有使用Tweepy,我想为每个用户获取推文中使用的图像/视频数量。到目前为止,我拥有的是:推文URL:“https://twitter.com/user_screen_name/status/tweet_id,我还有user_id和推文(文本链接媒体)。 我想做的是检查推文是否包含视频,如果是,计算它,图像也是如此。我注意到推文中使用的链接以“…/t.co.开头。”

  • 欢迎阅读系列教程,内容涵盖 OpenCV,它是一个图像和视频处理库,包含 C ++,C,Python 和 Java 的绑定。 OpenCV 用于各种图像和视频分析,如面部识别和检测,车牌阅读,照片编辑,高级机器人视觉,光学字符识别等等。

  • 因此,我尝试提取视频的每一帧,然后使用ffprobe查看视频中何时播放每一帧,然后使用这些提取的图像和ffprobe输出将视频缝合在一起。 现在,我有一个批处理文件: 首先,为图像创建一个目录。然后ffmpeg将视频的所有帧提取到单独的PNG文件中,这些文件被适当地编号。最后,ffprobe会看到视频中第一次显示每一帧的时间(即:第1帧以0秒的速度显示,但以60fps的速度显示,然后第2帧以0.0