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

How to convert colored image from RAW to JPEG format

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

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

图片转换为jpeg格式成功,但存在一些问题: 1- 结果图像是灰色的,没有彩色。 2- 结果图像被细分为 9 个图像,作为重复的小图像网格。

当我把rgb改成gray时,return我得到了3张不同光照条件下由暗到亮的灰度图。 我需要转换图像格式,任何人都可以帮助我如何编辑代码或任何其他能够打开图像的软件,我尝试了很多软件但它们很有用,我使用 windows 10.

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

您可能使用了错误版本的 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/
下载 Select:
版本:稳定(当前版本为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):


我找到了解决方案:

显然原始图像格式是 "planar" 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 不支持原始 "planar" RGB 格式。
唯一接近RGB的"planar"是GBR(绿色平面在前)。
我使用 extractplanesmergeplanes 对颜色通道进行重新排序。

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


示例:
由于 Whosebug 不允许上传 raw 文件,我上传了一张 png 格式的 grayscale 模拟 "planar" RGB 的图像:

要测试解决方案,请执行以下步骤:

  1. 下载 image(imgur 将其命名为:D5IUp.png)。
  2. png 转换为 raw 为 "planar" RGB"(.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

结果:


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