16位灰度png图像的Python图像处理

2024-09-28 22:29:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在写一个脚本来检查图像是否正常化。我使用pythonpng模块来分析图像。为了测试它,我在Photoshop中创建了一个16位图像,由一条2像素的线和一个黑白像素组成。 我的脚本正确地标识了黑色像素(0),但它给出的值(65533)与我期望的白色像素值(65535)不同。在

我不明白为什么会这样。我的脚本有什么问题吗?还是跟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"

Tags: 图像import脚本ifpngsys像素color
1条回答
网友
1楼 · 发布于 2024-09-28 22:29:55

看起来PNG文件实际上存储的是65533值,而不是65535。我认为这与Photoshop在“16位模式”下使用15位的事实有关,因此在保存16位灰度图像时会有一个小的误差。在

相关问题 更多 >