Como abrir arquivo .RAW com cabeçalho personalizado bizarro

0

Eu tenho um arquivo .raw bizarro no seguinte formato, que eu preciso abrir para um projeto de classe. Tem a seguinte estrutura usando o exemplo de uma foto de 487x414:

  • O número de linhas é dois bytes não assinados (01E7)
  • O número de colunas é dois bytes não assinados (019E)
  • O número de bits representando cada pixel (isso sempre será 8)
  • Os dados da imagem real

O projeto é executar detecção de bordas no arquivo .raw, mas o professor disse que eu deveria ser capaz de abri-lo com qualquer software de edição de imagem antigo (aparentemente, ele espera que eu seja solicitado com uma janela onde eu configurei o número de bytes no cabeçalho), então eu tentei o seguinte sem sucesso:

  • Paint.net
  • Elementos do Photoshop
  • Adobe Lightroom
  • ImageMagick
  • Gimp
  • DCRaw

Eu tenho dual boot no Ubuntu e no Windows, então se alguém tiver alguma idéia de como eu poderia exibir esse arquivo, (no momento estou tentando carregá-lo no OpenCV como um histograma, mas eu gostaria de ter algo para verificar o meu resultado contra), seria muito apreciada.

    
por Seanny123 09.03.2014 / 03:57

1 resposta

0

Acabei tendo que escrever um script Python personalizado que você pode encontrar aqui . Aqui está a parte importante.

#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)
    
por 21.07.2014 / 18:50