2011-11-09 123 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位灰度图像时存在一个很小的不准确性。