0

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

なぜこれが起こるのか理解できません。私のスクリプトに何か問題がありますか、それとも 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"
4

1 に答える 1

2

PNGファイルには、実際には65535ではなく65533の値が白いピクセルに保存されているようです。これは、実際にはPhotoshopが「16ビットモード」で15ビットで動作するという事実と関係があると思います。 16 ビット グレースケール イメージを保存するときの不正確さ。

于 2011-11-09T23:19:51.707 に答える