【问题标题】:replacing "hardcopy" with Octave function用 Octave 函数替换“硬拷贝”
【发布时间】:2013-08-19 01:57:09
【问题描述】:

我正在尝试在 Octave 中创建一些视频。我有一个 matlab 文件可以做我想做的事,但我正试图让它在 Octave 中工作。基本上,函数“硬拷贝”是此代码中使用的未记录的 matlab 函数,我想用对八度音程友好的东西替换它。

我在这里找到了一个反向解决方案(有人试图使用硬拷贝):http://www.mathworks.com/support/solutions/en/data/1-3NMHJ5/?solution=1-3NMHJ5

但我是 matlab 和 octave 方面的超级新手,所以虽然该解决方案的选项 2 看起来会起作用(我认为 octave 具有 imread 功能)但我不知道要对代码进行哪些更改有(我没有写它,而且,正如我所说,我不知道matlab)。代码是

    % add this frame to movie file
    %mov = addframe(mov,gcf);
    renderer = get(hnd,'renderer');
    if strcmp(renderer,'painters')
        renderer = 'opengl';
    end
    set(hnd, 'Units', 'pixels');
    pixelsperinch = get(0,'screenpixelsperInch');

    frame = hardcopy(hnd, ['-d' renderer], ['-r' num2str(round(pixelsperinch))]);
    addframe(mov,frame);

有人知道如何将硬拷贝功能换成替代品吗?

【问题讨论】:

    标签: matlab image-processing frame octave video-processing


    【解决方案1】:

    这不是一个令人满意的解决方案,但您可以使用更高级别的print 命令将单个帧保存到文件中。查看this PDF presentation 中第 91-93 页的部分代码示例。然后可以使用其他工具(例如,ffmpeg as is done here)将这些帧组装成电影。

    要获得更有效的帧抓取解决方案,您必须使用 OpenGL(这就是 hardcopy 正在做的事情)。 This thread 建议一些起点,但可能需要编写 C/C++ 代码。

    【讨论】:

    • 我不太明白 fname = sprintf('frames/frame%04d.png',i); 的 'frames/frame%04d.png'在 PDF 演示文稿中。你知道我会用 pdf 中的代码替换我的代码的哪些部分吗?抱歉,我真的是 matlab 和 octave 的超级新手,非常感谢您的帮助!
    • 正如我所提到的,这不是一个简单的解决方案——hardcopy 毕竟是无证的——而且 Octave 似乎没有像 Matlab 的 getframe 这样的东西。您将不得不阅读一些文档,弄清楚一些东西,并且当某些东西似乎不起作用时,可能会回到 StackOverflow 并提出具体问题。你问的sprintf 命令只是创建编号的文件名,如:'frames/frame0000.png'、'frames/frame0001.png'、'frames/frame0002.png' 等。试试看,你会看到。然后将这些文件名字符串传递给print 函数以写入PNG 文件。
    • 明白了,非常感谢您的澄清!我会试一试,然后返回!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-11
    • 1970-01-01
    相关资源
    最近更新 更多