グレースケールの 8 ビット符号なし整数の raw バイナリ ファイルである画像ファイルがあり、それを 16 ビット ファイルに変換して raw バイナリで保持する必要があります。16 から 8 に行くのは情報を遮断するだけなので比較的簡単ですが、どうすれば逆に行くことができるのか興味があります。
具体的には、C++ で記述されたプロセッサに入る画像があり、プロセッサは 16 ビット符号なし整数画像ファイルしか使用しないため、8 ビット ファイルを 16 ビット ファイルに変換する必要があります。Python Imaging Library でいくつかの処理を行っていますが、この特定の関数を見つけることができませんでした。
更新:
私はcgohlkeのアドバイスに従い、論理的に見える次のコードを持っていますが、次のエラーのために「最終」変数を受け入れていません:
Traceback (most recent call last):
File "C:\Users\Patrick\workspace\colorCorrect\src\editGrayscale.py", line 36, in <module>
u1 = np.fromfile(final, 'uint8')
TypeError: file() argument 1 must be encoded string without NULL bytes, not str
私のコード:
import Image
import numpy as np
fileName = raw_input("Enter a file name: ")
saveFile = raw_input("Enter a new save file name: ")
with open(fileName, 'rb') as f:
im = Image.fromstring('L', (3032, 2016), f.read()) # also try 'L;16B', 'I;16', and 'I;16B'
changed = im.point(lambda i: i/.4)
final = changed.tostring()
np.arange(256).astype('uint8').tofile(final)
u1 = np.fromfile(final, 'uint8')
u2 = u1.astype('uint16')
u2 *= 257 # scale to full 16 bit range
u2.tofile(saveFile)