Как открыть файл .RAW с причудливым пользовательским заголовком

1017
Seanny123

У меня есть странный файл .raw в следующем формате, который мне нужно открыть для проекта класса. Он имеет следующую структуру на примере фотографии 487x414:

  • Количество строк - два байта без знака (01E7)
  • Количество столбцов составляет два неподписанных байта (019E)
  • Количество бит, представляющих каждый пиксель (это всегда будет 8)
  • Фактические данные изображения

Проект состоит в том, чтобы запустить обнаружение краев в файле .raw, но профессор сказал, что я смогу открыть его с помощью любого старого программного обеспечения для редактирования изображений (очевидно, он ожидает, что мне предложат открыть окно, в котором я установлю количество байтов в заголовок), поэтому я попробовал следующее безрезультатно:

  • Paint.net
  • Photoshop Elements
  • Adobe Lightroom
  • ImageMagick
  • канитель
  • DCRaw

У меня двойная загрузка Ubuntu и Windows, поэтому, если у кого-то есть какие-либо идеи о том, как я могу отобразить этот файл (в настоящее время я пытаюсь загрузить его в OpenCV в виде гистограммы, но я хотел бы иметь что-то, чтобы проверить мой результат против), был бы очень признателен.

0
Попробуй уфроу. Я использую его для редактирования необработанных файлов с моей камеры (nikon), и, насколько мне известно, он поддерживает большинство других форматов. Стоит попробовать. Holloway 9 лет назад 0
Я попробовал это, но, к сожалению, это не сработало. Спасибо, что напомнили мне об этом вопросе без ответа. Seanny123 9 лет назад 0

1 ответ на вопрос

0
Seanny123

I ended up having to write a custom Python script which you can find here. Here's the important part.

#Load the raw file f = open(filename,'rb') # switch to command line args later #Because the byte order is weird a = f.read(1) b = f.read(1) #First line is rows rows = int((b+a).encode('hex'), 16) a = f.read(1) b = f.read(1) #Second line is columns cols = int((b+a).encode('hex'), 16) #Last byte is encoding, but we're just going to ignore it f.read(1) #And everything else is 8 bit encoded, so let's load it into numpy and display it with matplotlib bin_image = np.fromstring(f.read(), dtype=np.uint8) #Change the shape of the array to the actual shape of the picture bin_image.shape = (cols, rows) fig = pylab.figure() #Display the original image fig.add_subplot(1,4,1) pylab.imshow(bin_image, cmap=cm.gray) 
Если это сработало, отметьте это как принятое, чтобы удалить этот вопрос из оставшихся без ответа. Holloway 9 лет назад 0

Похожие вопросы