2

我有 yuv 序列,我想将它们转换为 bmp 图像。我想把它保存到我电脑上的一个文件夹中。

我在这个链接中使用了 yuv2bmp m 文件。

虽然 Yuv 文件只有 44MB,但 Matlab 抛出了内存错误。我该如何克服这个问题?请问你能帮帮我吗?

此致...

4

4 回答 4

1

由于这个问题没有快速的答案,我在这里放了一些可能对您有帮助的链接。但是所有这些都更多地指的是 C 中的实现,而不是 Matlab。

在 YUV 和 RGB 之间转换

C中的一些示例代码

Delphi中的那个很不错。对于那些喜欢使用图像处理的人来说,这个网站确实是一个非常好的网站

还有一篇不错的文章

希望它可以帮助你。

于 2009-12-22T10:14:11.863 回答
1

我从未使用过 YUV 格式,但维基百科说:

今天,YUV 一词在计算机行业中常用来描述使用 YCbCr 编码的文件格式。

如果您实际上使用的是 YCbCr 格式,并且您可以访问Image Processing Toolbox,则可以使用函数YCBCR2RGB将 YCbCr 颜色值转换为 RGB 颜色空间,然后使用IMWRITE将生成的 RGB 图像保存为位图。

于 2009-12-22T15:38:46.110 回答
1

yuv2bmp.m 中的第 20 到 39 行读取

    [Y,U,V]=yuvread(filename,start_frame,num_frame);%4:2:0%%%%%%%%%%%%%%%%

[My Ny iL]=size(Y);
[Mu Nu iu]=size(U);
[Mv Nv iv]=size(V);


for f=1:num_frame
   UU(:,:,f)= imresize(U(:,:,f),[My Ny],'nearest');
   VV(:,:,f)= imresize(V(:,:,f),[My Ny],'nearest');


    image(:,:,1) = Y(:,:,f)+1.402*(VV(:,:,f)-128);
    image(:,:,2) = Y(:,:,f)-0.34414*(UU(:,:,f)-128)-0.71414*(VV(:,:,f)-128);
    image(:,:,3) = Y(:,:,f)+1.772*(UU(:,:,f)-128);

    fname=sprintf('%s%d%s',filename(1:length(filename)-4),f,'.bmp');

    imwrite(uint8(image),fname,'bmp');
end

这看起来像是在浪费相当多的内存。不幸的是,我没有任何示例 yuv 图像,但尝试通过以下方式修改这部分代码,并检查它是否仍然为您提供正确的结果:

for f=1:num_frame

    % read each image of the sequence separately
    [Y,U,V]=yuvread(filename,start_frame+f-1,1);%4:2:0%%%%%%%%%%%%%%%%

    % in the following three lines, I have replaced UU with U and VV with V, and I've
    % removed all the (:,:,f)
    image(:,:,1) = Y+1.402*(V-128);
    image(:,:,2) = Y-0.34414*(U-128)-0.71414*(V-128);
    image(:,:,3) = Y+1.772*(U-128);

    fname=sprintf('%s%d%s',filename(1:length(filename)-4),f,'.bmp');

    imwrite(uint8(image),fname,'bmp');
end

此外,在 yuvread.m 的第 52 到 54 行中,您可以将 'double' 替换为 'single'。这将您的内存使用量再减少 50%,并且它不应该对输出产生任何影响,因为无论如何您最终都会重新转换为 uint8。

于 2009-12-22T16:09:34.377 回答
0

您可以使用ffmpeg在 YUV 和 BMP 之间进行简单的转换。

  1. 下载 ffmpeg
  2. 转到命令提示符
  3. 执行如下命令:

    ffmpeg.exe -s 1280x720 -i input.yuv output.bmp

    ffmpeg.exe -s 1280x720 -i input.bmp output.yuv

不要忘记在命令中更改大小。

于 2015-08-25T10:10:57.400 回答