how to convert raw images to png in python?

匿名 (未验证) 提交于 2019-12-03 03:03:02

问题:

I have a folder containing over 200 raw images, i want to convert all of them to png or any other format, In C it's pretty easy but in python i don't know how it's done

I found this snippet

#import struct import numpy, array, PIL, Image from struct import *  #declarations arr1D   =   array.array('H') #H is unsigned short  #------------------------------------ #read 16 bit unsigned raw depth image #------------------------------------ w           =   640 h           =   480 fid        =   open('/home/salman/salman/NiSimpleRead_salman/data/200.raw') #fid         =   open('/home/salman/test.raw') numBytes    =   w*h arr1D.read(fid, numBytes) fid.close()  #---------------------------------------------------- #convert to float numpy array -> scale -> uint8 array #---------------------------------------------------- numarr = numpy.array(arr1D, dtype='float'); numarr = 255 - (numarr*255.0/numarr.max()) numarr.shape = (h,w) numarr = numarr.astype('uint8')  #====================== #IMAGES #======================  #2D numpy array -> image  #----------------------- img        =   Image.fromarray(numarr); #print data.dtype.name  #image view and save #------------------- #img.show() img.save('/home/salman/test.png') 

This is the only snippet that I can find, is this the proper way to do it?

回答1:

It should be something like:

rawData = open("foo.raw" 'rb').read() imgSize = (x,y) # Use the PIL raw decoder to read the data. # the 'F;16' informs the raw decoder that we are reading  # a little endian, unsigned integer 16 bit data. img = Image.fromstring('L', imgSize, rawData, 'raw', 'F;16') img.save("foo.png") 

Using the handbook and another SO question.

The First argument is the image mode and can be any from:

  • 1 (1-bit pixels, black and white, stored with one pixel per byte)
  • L (8-bit pixels, black and white)
  • P (8-bit pixels, mapped to any other mode using a colour palette)
  • RGB (3x8-bit pixels, true colour)
  • RGBA (4x8-bit pixels, true colour with transparency mask)
  • CMYK (4x8-bit pixels, colour separation)
  • YCbCr (3x8-bit pixels, colour video format)
  • I (32-bit signed integer pixels)
  • F (32-bit floating point pixels)


回答2:

from PIL import Image rawData = open("foo.raw", 'rb').read() imgSize = (703,1248)# the image size img = Image.frombytes('L', imgSize, rawData) img.save("foo.jpg")# can give any format you like .png 

was the one that worked for me



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!