2011-11-09 20 views
0

画像が正規化されているかどうかを確認するスクリプトを作成しています。私は画像を分析するためにPython PNGモジュールを使用しています。それをテストするために、Photoshopで白黒ピクセルの2ピクセルラインからなる16ビットイメージを作成しました。 私のスクリプトは、黒いピクセル(0)を正しく識別しますが、白いピクセルに対して予想していた値(65535)とは異なる値(65533)を返します。16ビットグレースケールPNG画像のPython画像処理

なぜこのようなことが起こるのか理解できません。スクリプトに何か問題がありますか、またはPhotoshopでイメージを保存する方法と関連していますか?

ミニマルテスト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ビットのグレースケール画像を保存するときには不正確さがあります。