【问题标题】:Issue with writeVideo/ VideoWriter MATLABwriteVideo/VideoWriter MATLAB 的问题
【发布时间】:2021-12-04 05:22:54
【问题描述】:

我是初学者,对于错误提前道歉。

我有一组来自相机记录的数据,这些数据保存在具有这些尺寸 (250x300x10603x12) 的 4D 数组中。 首先是视频的尺寸(像素)。 10603 是 FrameRatexTime。 12 是我记录的主题。

我一次提取一个主题进行分析:

subj1 = data(:,:,:,1);

这将我带到一个包含主题 1 帧的数组,我可以用 implay 显示它。 现在我想为这个新数组写一个视频并保存为 .avi 格式,我使用以下代码:

v = VideoWriter('subj1.avi')
open(v)
writeVideo(v,subj1)
close(v) 

但它一直给我这个错误

使用 VideoWriter/writeVideo 时出错(第 410 行)IMG 必须是一个数组 灰度或 RGB 图像。

实际上,看数组的形状,没有任何东西指向灰度或 RGB 索引。在这种情况下如何获取 .avi 文件?我必须转换数组吗? 为什么它仍然显示带有implay的视频?

澄清:我必须将数组转换为 .avi 文件的事实是因为我必须通过使用 OpenCv 将其导出到 Python 来分析它。 其实如果我直接将.mat文件导出到Python中,是无法获取Frames列表的。

【问题讨论】:

    标签: arrays matlab opencv video-processing


    【解决方案1】:

    Matlab 的 writeVideo 文档说,对于像您这样的一系列灰度图像,它需要一个“高×宽×1×帧”数组。你只是传递它“高度×宽度×帧”。

    所以,你需要重塑你的subj1。也许尝试这样做:

    newsubj = zeros(250, 300, 1, 10603)
    newsubj(:,:,1,:) = subj1
    

    然后保存newsubj 而不是subj1

    writeVideo(v,newsubj)
    

    最后,我认为当您保存为 avi 时可能会得到一些有损压缩,因此从 Matlab 导出并将其导入 Python 可能不是最好的方法。

    【讨论】:

    • 首先感谢您的回答!我试过你的方法,但结果是这个错误:“使用 VideoWriter/writeVideo 时出错(第 410 行)请求的 250x300x3x10603 (17.8GB) 数组超出了最大数组大小首选项。创建大于此限制的数组可能需要很长时间并导致MATLAB 变得无响应。有关更多信息,请参阅数组大小限制或首选项面板”。我该如何克服这个问题?
    • 我必须以 .avi 格式导出文件的事实是因为我在 python 中使用 OpenCV,而我无法收集 openCv 可以详细说明的 Numpy 数组中的帧。帧应存储在 Numpy 数组列表中(因为使用 openCv,我使用 for 循环读取每一帧。但是,当我使用 scipy.io 将其导入 Python 时,它们存储为 unit8 数组(尺寸 250x300x10603) . 以何种方式我可以将这些 Frames 保存在 Numpy Array 列表中?
    • 为什么是 250x300x3x10603 而不是 250x300x1x10603?它是RGB图像吗?看起来您的内存不足 - 这与您之前遇到的问题不同。您将创建一个较小的newsubj 数组,例如 250x300x1x100,只放入sub1 的一部分,然后将其写入您的 avi。你可以把它放在一个 for 循环中并遍历你需要的所有范围。
    • 我认为这是一个 RGB 图像,但我不明白为什么。我试图按照你的建议将数组分成更小的部分,但它不起作用:(但我在想,做这样的事情吗?video = VideoWriter('subj1.avi') N = length(newsubj) open(video) for ii = 1:N frame = newsubj(ii) writeVideo(video,frame) end close(video) 它创建了一个由 1x1x3 uint8 组成的 1x10603 结构。Implay 正在工作,但视频是全黑(没有任何图像),所以我遗漏了一些东西。我是关闭还是使用 for 循环不正确?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-12
    • 1970-01-01
    • 2021-05-07
    • 2013-08-05
    • 2022-10-12
    相关资源
    最近更新 更多