如何将RAW格式的彩色图像转换为JPEG格式

3

我正在尝试将.raw格式的彩色图像转换为.jpg或.png格式,我使用了ImageMagick,并使用以下命令提示代码:

convert -size 768X576 -depth 8 rgb:my_image.raw my_image.jpeg

成功将图像转换为jpeg格式,但出现以下问题: 1- 结果图像为灰度而不是彩色。 2- 结果图像被细分成9个网格小图像重复。
当我将rgb更改为gray时,返回3个不同亮度的灰度图像。 我需要将图像格式转换,有人能帮我如何编辑代码或其他能打开图像的软件吗?我试过很多软件但都无用,我使用的是Windows 10。

请提供原始图像 - 使用Google Drive、Dropbox或某些文件共享服务,以及您所知道的有关其外观或详细信息的任何内容。谢谢。 - Mark Setchell
1个回答

5

我使用自己的原始输入图像进行了测试,工作正常。

您可能正在使用错误版本的ImageMagick。
我从https://imagemagick.org/script/download.php下载了版本:ImageMagick-7.0.8-49-Q8-x64-static.exe

在我下载的版本中,转换命令是magick.exe而不是convert

以下命令有效:
magick.exe -size 768x576 -depth 8 rgb:my_image.raw my_image.jpeg

我更喜欢使用FFmpeg进行格式转换。
您可以从https://ffmpeg.zeranoe.com/builds/下载它
选择:
版本:stable(当前版本为4.1.3)。
架构:Windows 64位
链接:静态。

解压缩zip文件,您只需要ffmpeg.exe
要使用FFmpegraw文件转换为jpeg,您可以使用以下命令:

ffmpeg -y -video_size 768x576 -pix_fmt rgb24 -i my_image.raw -pix_fmt yuvj444p my_image.jpeg

假设您的原始文件格式为“chunky” RGB(按顺序:r,g,b,r,g,b,r,g,b ...),请确保文件大小为 768 * 576 * 3 = 1,327,104字节。


只是为了确保问题不在您的输入文件中...

您可以使用FFmpeg创建合成输入的raw图像,并将结果转换为jpeg

创建合成输入:
ffmpeg -y -f lavfi -i testsrc=duration=1:size=768x576:rate=1 -pix_fmt rgb24 -f image2 test_image.raw

转换合成输入:
ffmpeg -y -video_size 768x576 -pix_fmt rgb24 -i test_image.raw -pix_fmt yuvj444p test_image.jpeg

结果(test_image.jpeg):
test_image


我找到了解决方案:

显然,原始图像格式是“平面”RGB:

RRRRR
RRRRR
RRRRR
GGGGG
GGGGG
GGGGG
BBBBB
BBBBB
BBBBB

将它转换为jpeg格式(使用FFmpeg)是一个复杂的问题:

ffmpeg -y -video_size 768x576 -pix_fmt gbrp -i m-001-1.raw -filter_complex "extractplanes=g+b+r[g][b][r],[r][g][b]mergeplanes=0x001020:gbrp[v]" -map "[v]" m-001-1.jpeg

FFmpeg不支持原始的“平面”RGB格式。
唯一接近RGB的“平面”是GBR(绿色平面在前)。
我使用了extractplanesmergeplanes来重新排列颜色通道。

ImageMagick有一个更简单的解决方案:
magick.exe -depth 8 -interlace plane -size 768x576 rgb:image.raw image.jpeg


例子:
由于stackoverflow不允许上传raw文件,我上传了一个以灰度格式模拟“平面”RGB的png图像:

planar RGB

为了测试解决方案,请按照以下步骤进行:

  1. 下载图像(imgur将其命名为:D5IUp.png)。
  2. png转换为以“平面”RGB格式的raw(使用.y扩展名):
    ffmpeg -y -i D5IUp.png -c:v rawvideo -pix_fmt gray D5IUp.y
  3. raw转换为jpeg:
    ffmpeg -y -video_size 128x96 -pix_fmt gbrp -i D5IUp.y -filter_complex "extractplanes=g+b+r[g][b][r],[r][g][b]mergeplanes=0x001020:gbrp[v]" -map "[v]" D5IUp.jpeg

结果:
rgb


ImageMagick批量转换示例:
for %%f in (*.raw) do (magick.exe -depth 8 -interlace plane -size 768x576 rgb:"%%f" "%%~nf.jpeg")


顺便提一下,命令不是magick,这是因为它是Windows与Linux/macOS的区别。命令是magick,因为您正在使用v7而不是v6,在v6中它是convert。顺便说一句,如果在Windows上安装时选中“Legacy Tools”选项,则convert命令仍可在v7上使用。 - Mark Setchell
@Rotem非常感谢您的详细回答。无论是convert还是magick都给了我相同的结果,都是一排灰色图像,这不是网格的问题,我可以裁剪它,但我想返回一张彩色图像。 - hh tt
我使用Windows命令行与ffmgea,我的图像也出现了相同的问题,即灰色图像网格。但是当我创建一个检查图像时,它可以正常工作。 - hh tt
所以问题一定是您的输入文件格式。您不能将原始图像上传到stackoverflow网站。 - Rotem
非常感谢ffmpeg的提示: 现在我能够将Linux framebuffer /dev/fb0转换为可视化的RAW RGB565格式: ffmpeg -y -f image2 -c rawvideo -video_size WIDTHxHEIGHT -pix_fmt rgb565 -i file1 file2.png - Vitaly
显示剩余12条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接