Чтение изображений RAW в c ++ или У изображений RAW есть заголовки? - PullRequest
1 голос
/ 16 марта 2012

У меня есть странные образы, которые я получаю с какого-то оборудования на работе. Они сделаны из этого странного оборудования, в котором несколько изображений сшиты вместе и хранятся в виде необработанных изображений. Подумайте об одном из этих дисплеев компьютерной безопасности с четырьмя изображениями, отображаемыми одновременно. По сути, это так. И тогда они хранятся в виде необработанных изображений. Энннд, для этого старого куска мусора нет документации.

Я попытался написать экстрактор, чтобы разделить изображения на отдельные необработанные файлы. Но программное обеспечение необработанных изображений, которое я использовал, чтобы попытаться прочитать изображение, извлеченное в качестве теста, указывает, что оно повреждено. В настоящее время я думаю, что, хотя это просто необработанные данные, там должен быть заголовок файла. Но как бы я ни выглядел, я не могу найти определение для необработанного файла изображения онлайн. Я вижу, что существует множество различных типов файлов необработанных изображений, но я даже не могу найти определения для них.

Любой совет для меня?

edit: После перечитывания этого, я не думаю, что я был очень ясен. Я сделал предположение о чтении в моем необработанном файле, который я хочу разделить, предположив, что я считаю, что в файле нет заголовка, и начинаю копировать данные для первого изображения, которое я извлекаю, с первым байтом данных. Я также делаю то же предположение в записываемом файле изображения и не пишу заголовок, так как копирую изображение. Я считаю, что мое предположение об отсутствии заголовков неверно, и прошу разъяснений по этому поводу. Чтобы помочь объяснить это, я включаю тестовый код, который я написал:

#include <stdio.h>
#include <string.h>

using namespace std;

//size of individual image
int width  = 400;
int height = 400;

//size of input image
int inputWidth  = 1600;
int inputHeight = 8000;

int offset = 16;

char strInputFile[]  = "captured.raw";
char strOutputFile[] = "extracted.raw";

int main()
{
    printf( "Hi\n" );
    FILE* pInput  = NULL;
    FILE* pOutput = NULL;
    char* buf = new char[width];
    memset( buf, 0, width );

    pInput  = fopen( strInputFile,"rb" );
    pOutput = fopen( strOutputFile,"wb" );
    if( pInput && pOutput )
    {
        for( int i = 0; i < height; i++ )
        {
            //read in a row of pixels
            fread( buf, 1, width, pInput );
            //write out the row of pixels
            fwrite( buf, 1, width, pOutput );
            //move the file pointer forward to the next row of pixels
            fseek( pInput, inputWidth - width, SEEK_CUR );
        }
    }
    fclose( pInput );
    fclose( pOutput );

    return 0;
}

Ответы [ 3 ]

2 голосов
/ 16 марта 2012

Учитывая, насколько разнородными могут быть необработанные форматы изображений, я бы предложил следующий подход:

  • Попробуйте сопоставить ваше необработанное изображение с любой из спецификаций необработанного формата изображения, которые вы можете найти (см. Википедия для получения рекомендаций). Как указывает xpda, попробуйте FreeImage .
  • Найдите заголовок JPEG или TIFF в любом месте изображения и попытайтесь его интерпретировать, если найдете.
  • Если ничего не помогает, напишите некоторый код, чтобы сравнить отдельные изображения для определения сходства. Для изображений, снятых последовательно, если они содержат метаданные, метаданные должны быть очень похожими. Вы можете почувствовать содержимое изображения, например, «Все изображения имеют 20 общих байтов в первых 120 байтах», что подразумевает возможность заголовка и так далее. Или вы можете заключить, что изображения не имеют заголовка, и это также является важным знанием в вашем случае (говорит вам прекратить попытки).
1 голос
/ 16 марта 2012

Современные необработанные изображения имеют различные форматы с заголовками и метаданными, обычно сжимаются, а иногда сжимаются со сжатием с потерями. Многие необработанные форматы публично не документированы. FreeImage может использоваться для чтения необработанных изображений со многих цифровых камер.

Старые системы безопасности и другие камеры могут хранить необработанные данные просто как набор цифр, составляющих изображение, и ничего более. Это может или не может быть сжато, и это может или не может быть значениями RGB.

Без документации вам, возможно, придется изучить данные файлов и использовать проверенную временем технику проб и ошибок. Или получить новые камеры. : -)

1 голос
/ 16 марта 2012
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...