Python / Pyside: создание гистограммы изображений - PullRequest
4 голосов
/ 19 августа 2011

Какой самый эффективный способ создания гистограммы изображения (QImage) в PySide?

Мое тестовое изображение 1,9 МБ, 3648x2736 пикселей, фото JPEG

Я пробовал два способа:

1

import time
start = time.time()

for y in range(h):
    line = img.scanLine(y)  # img - instance of QImage
    for x in range(w):
        color = struct.unpack('I', line[x*4:x*4+4])[0]
        self.obrhis[0][QtGui.qRed(color)] += 1    # red
        self.obrhis[1][QtGui.qGreen(color)] += 1  # green
        self.obrhis[2][QtGui.qBlue(color)] += 1   # blue

print 'time: ', time.time() - start

среднее время = 15 с

2

import time
start = time.time()

buffer = QtCore.QBuffer()
buffer.open(QtCore.QIODevice.ReadWrite)
img.save(buffer, "PNG")

import cStringIO
import Image

strio = cStringIO.StringIO()
strio.write(buffer.data())
buffer.close()
strio.seek(0)
pilimg = Image.open(strio)

hist = pilimg.histogram()
self.obrhis[0] = hist[:256]
self.obrhis[1] = hist[256:512]
self.obrhis[2] = hist[512:]

print 'time: ', time.time() - start

среднее время = 4 с

Лучше, но все еще медленно. Есть ли более быстрый способ расчета гистограммы изображения из QImage?

1 Ответ

0 голосов
/ 19 августа 2011

Другой подход, который вы можете попробовать, - это получить данные изображения в массив numpy (надеюсь, это возможно разумно эффективно) и использовать numpy.histogram .

...