Python/Pyside:创建图像直方图

Python/Pyside:创建图像直方图,python,histogram,pyside,Python,Histogram,Pyside,在PySide中创建图像(QImage)直方图最有效的方法是什么 我的测试图像是1,9MB,3648x2736px,jpeg图片 我尝试了两种方法: 一, 平均时间=15秒 二, 平均时间=4s 更好,但仍然缓慢。 有没有一种更快的方法从QImage计算图像直方图?您可以尝试的另一种方法是将图像数据放入一个numpy数组(希望合理有效)并使用。您所说的“最有效”是什么意思?:最容易编码?最快的处理速度?使用最少的内存?最快的处理速度是我的目标。通过对两种不同的方法进行计时,您将有一个良好的开端。

在PySide中创建图像(QImage)直方图最有效的方法是什么

我的测试图像是1,9MB,3648x2736px,jpeg图片

我尝试了两种方法:

一,

平均时间=15秒

二,

平均时间=4s

更好,但仍然缓慢。
有没有一种更快的方法从QImage计算图像直方图?

您可以尝试的另一种方法是将图像数据放入一个numpy数组(希望合理有效)并使用。

您所说的“最有效”是什么意思?:最容易编码?最快的处理速度?使用最少的内存?最快的处理速度是我的目标。通过对两种不同的方法进行计时,您将有一个良好的开端。您可以尝试不同的循环/交互计算方法(例如),但这更难实现。
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
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