python画像の読み取りについて、png、exrなど
10815 ワード
前の2点は主に深さ図exrの処理であり、pngフォーマットとの変換を含む後、比較的一般的な一般的な読み取り方式である.
1、exr深さ図を読み取る
1、OpenEXRパッケージ
OpenEXRのインストールはちょっと面倒ですここの深さ図は3チャネルで、各チャネルは同じです
2、imageioで読み取る
2、深さ図をpng形式に保存する
ここではpngパケットを用い,深さマップを一定の範囲下のnormalizationDepthに正規化して保存関数とする.
対応する読み取り方法は次のとおりです.
3、その他の方式
以下の他にも依存パックがあり使いやすいですが、今回は主にこれらのものを使います
1、exr深さ図を読み取る
1、OpenEXRパッケージ
OpenEXRのインストールはちょっと面倒ですここの深さ図は3チャネルで、各チャネルは同じです
def exr2tiff(exrpath):
File = OpenEXR.InputFile(exrpath)
PixType = Imath.PixelType(Imath.PixelType.FLOAT)
DW = File.header()['dataWindow']
Size = (DW.max.x - DW.min.x + 1, DW.max.y - DW.min.y + 1)
rgb = [np.frombuffer(File.channel(c, PixType), dtype=np.float32) for c in 'RGB']
r =np.reshape(rgb[0], (Size[1],Size[0]))
mytiff = np.zeros((Size[1], Size[0]), dtype=np.float32)
mytiff = r
return mytiff
2、imageioで読み取る
import imageio
depth = imageio.imread(depthfile)
2、深さ図をpng形式に保存する
ここではpngパケットを用い,深さマップを一定の範囲下のnormalizationDepthに正規化して保存関数とする.
def saveUint16(z, path):
# Use pypng to write zgray as a grayscale PNG.
with open(path, 'wb') as f:
writer = png.Writer(width=z.shape[1], height=z.shape[0], bitdepth=16, greyscale=True)
zgray2list = z.tolist()
writer.write(f, zgray2list)
def depthToint16(dMap, minVal=0, maxVal=10):
#Maximum and minimum distance of interception
dMap[dMap>maxVal] = maxVal
# print(np.max(dMap),np.min(dMap))
dMap = ((dMap-minVal)*(pow(2,16)-1)/(maxVal-minVal)).astype(np.uint16)
return dMap
def normalizationDepth(depthfile, savepath):
correctDepth = readDepth(depthfile)
depth = depthToint16(correctDepth, 0, 10)
saveUint16(depth,savepath)
対応する読み取り方法は次のとおりです.
def loadDepth(dFile, minVal=0, maxVal=10):
dMap = scipy.misc.imread(dFile)
dMap = dMap.astype(np.float32)
dMap = dMap*(maxVal-minVal)/(pow(2,16)-1) + minVal
return dMap
3、その他の方式
以下の他にも依存パックがあり使いやすいですが、今回は主にこれらのものを使います
import matplotlib.image as mpimg
import skimage
import imageio
import scipy.misc
# ,
lena = mpimg.imread(imagepath)
# ,
lena = skimage.io.imread(imagepath)
lena = scipy.misc.imread(imagepath)
lena = imageio.imread(imagepath)
# skimage.img_as_float
lena = skimage.img_as_float(lena)