그레이 스케일 8 비트 부호없는 정수 원시 이진 파일 인 이미지 파일을 가지고 있으며이를 16 비트 파일로 변환하고 유지해야합니다. 원시 이진. 당신이 정보를 차단하기 때문에 16에서 8로가는 것이 상대적으로 쉽습니다. 그러나 나는 다른 방향으로 갈 수있는 방법이 궁금합니다.원시 이진 8 비트 부호없는 파일을 파이썬 이미징 라이브러리와 함께 서명되지 않은 16 비트로 변환합니다.
구체적으로 말해서 C++로 작성된 프로세서로 들어가는 이미지가 있고 프로세서는 16 비트 부호없는 정수 이미지 파일 만 사용하므로 내 8 비트 파일을 16 비트로 변환해야합니다. 파이썬 이미징 라이브러리로 일부 처리를하고 있지만이 특정 기능을 찾을 수 없었습니다.
UPDATE : 나는 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)
내가 넣을 때 : "TypeError : file() 인수 1은 str이 아닌 NULL 바이트없이 인코딩 된 문자열이어야합니다" – clifgray