Обработка изображений Python для 16-битного изображения в оттенках серого в формате png - PullRequest
0 голосов
/ 09 ноября 2011

Я пишу скрипт, чтобы проверить, нормализовано ли изображение или нет.Я использую модуль Python PNG для анализа изображения.Чтобы проверить это, я создал 16-битное изображение, состоящее из 2-пиксельной линии с черно-белым пикселем в Photoshop.Мой сценарий правильно идентифицирует черный пиксель (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"

1 Ответ

2 голосов
/ 10 ноября 2011

Кажется, что PNG-файл действительно имеет значение 65533, сохраненное для белого пикселя вместо 65535. Я предполагаю, что это как-то связано с тем, что в действительности Photoshop работает с 15 битами в «16-битном режиме», поэтомунебольшая неточность при сохранении 16-битных изображений в градациях серого.

...