Как конвертировать цветное изображение из RAW в формат JPEG - PullRequest
1 голос
/ 13 июня 2019

Я пытаюсь преобразовать цветное изображение из формата .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.

1 Ответ

2 голосов
/ 14 июня 2019

Я проверил это с моим собственным необработанным входным изображением, и оно работает нормально.

Возможно, вы используете неправильную версию ImageMagick.
Я скачал версию: ImageMagick-7.0.8-49-Q8-x64-static.exe с https://imagemagick.org/script/download.php.

В загруженной версии команда преобразования являетсяmagick.exe, а не convert.

Работает следующая команда:
magick.exe -size 768x576 -depth 8 rgb:my_image.raw my_image.jpeg.

Я предпочитаю использовать FFmpeg для преобразования формата.
Вы можете скачать его с https://ffmpeg.zeranoe.com/builds/
Выбрать:
Версия: стабильная (текущая версия 4.1.3).
Архитектура: Windows 64-bit
Связывание: статическое.

Извлеките zip-файл, вам понадобится только ffmpeg.exe.
Для преобразования файла raw в jpeg с помощью FFmpeg вы можете использовать следующую команду:

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

Предполагая, что ваш необработанный формат файла является "коренастым" RGB (упорядочено: r, g, b, r, g, b, r, g, b ...), убедитесь, что размер файла равен 768*576*3 = 1,327,104 байта.


Просто чтобы убедиться, что проблема не в вашем входном файле ...

Вы можете создать синтетическое входное изображение raw, используя FFmpeg и преобразовать результат в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 (сначала зеленая плоскость).
Я использовал extractplanes и mergeplanes для изменения порядка цветовых каналов.

ImageMagick имеет гораздо более простое решение:
magick.exe -depth 8 -interlace plane -size 768x576 rgb:image.raw image.jpeg


Пример:
Поскольку stackoverflow не позволяет загружать файлы raw, язагрузил png изображение в формате grayscale, имитирующее «планарный» RGB:

planar RGB

Для тестирования решения используйте следующие шаги:

  1. Загрузите образ (imgur назвал его: D5IUp.png).
  2. Преобразовать из png в raw как "планарный" 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

Результат:
rgb


Пример пакетного преобразования с использованием ImageMagick:
for %%f in (*.raw) do (magick.exe -depth 8 -interlace plane -size 768x576 rgb:"%%f" "%%~nf.jpeg")

...