2011-11-09 6 views
0

이미지가 정규화되었는지 확인하는 스크립트를 작성하고 있습니다. 파이썬 PNG 모듈을 사용하여 이미지를 분석하고 있습니다. 그것을 테스트하기 위해 포토샵에서 흑백 픽셀을 가진 2 픽셀 라인으로 구성된 16 비트 이미지를 만들었습니다. 내 스크립트는 검정 픽셀 (0)을 올바르게 식별하지만 흰색 픽셀에 대해 예상했던 것 (65535)과 다른 값 (65533)을 제공합니다.16 비트 그레이 스케일 png 이미지 용 파이썬 이미지 처리

왜 이렇게되는지 이해할 수 없습니다. 스크립트에 문제가 있거나 포토샵에서 이미지를 저장하는 것과 관련이 있습니까?

최소한의 테스트 PNG 이미지 : http://i.imgur.com/70D0F.png

스크립트 :

#!/usr/bin/python 

import sys 
import png # https://pypi.python.org/pypi/pypng 

if len(sys.argv) != 2: 
    print "Invalid number of arguments (",len(sys.argv),").\nUsage: python getMinMaxColor.py png_file" 
    sys.exit(-1) 
pngFilePath = sys.argv[1] 

f = open(pngFilePath, 'rb') 
r = png.Reader(file=f) 
k = r.read() 

bitDepth = 16 
if k[3]['bitdepth'] != None: 
    bitDepth = k[3]['bitdepth'] 

absMaxColor = 2**bitDepth-1 

maxColor = -1 
minColor = absMaxColor+1 
print "Content:" 
for line in k[2]: 
    for color in line: 
     print color 
     if (color > maxColor): 
      maxColor = color 
     if (color < minColor): 
      minColor = color 

f.close() 

print "\n" 

print "Min Color:", minColor 
print "Max Color:", maxColor, "(max:", absMaxColor, ")" 
if minColor == 0 and maxColor == absMaxColor: 
    print "Image is normalized" 
else: 
    print "Image is not normalized" 

답변

2

PNG 파일이 정말이 함께 할 수있는 뭔가가 가정 대신 65535의 흰색 픽셀에 저장된 65533 값을 갖는 것 Photoshop이 실제로 "16 비트 모드"에서 15 비트와 작동한다는 사실 때문에 16 비트 그레이 스케일 이미지를 저장할 때 약간의 부정확성이 있습니다.

관련 문제