我有一个包含200多个raw
图像的文件夹,我想将它们全部转换为png
或任何其他格式,在C中它很容易但在python中我不知道它是怎么回事完成
我找到了这个代码段
#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')
这是我能找到的唯一片段,这是正确的方法吗?
答案 0 :(得分:6)
应该是这样的:
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")
使用the handbook和another SO question。
第一个参数是图像模式,可以是以下任何一个:
答案 1 :(得分:3)
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
是那个适合我的人