4

PyQt4 を使用して qimage オブジェクトのピクセル データにアクセスする必要があります。

.pixel() は遅すぎるため、ドキュメントでは scanline() メソッドを使用するように言われています。

C++ では、scanline() メソッドによって返されたポインターを取得し、バッファーからピクセル RGB 値を読み書きできます。

Python では、ピクセル バッファーを指す SIP voidptr オブジェクトを取得するため、bytearray を使用してピクセル RGB 値のみを読み取ることができますが、元のポインターの値を変更することはできません。

助言がありますか?

4

1 に答える 1

8

ここではいくつかの例を示します。

from PyQt4 import QtGui, QtCore
img = QtGui.QImage(100, 100, QtGui.QImage.Format_ARGB32)
img.fill(0xdeadbeef)

ptr = img.bits()
ptr.setsize(img.byteCount())

## copy the data out as a string
strData = ptr.asstring()

## get a read-only buffer to access the data
buf = buffer(ptr, 0, img.byteCount())

## view the data as a read-only numpy array
import numpy as np
arr = np.frombuffer(buf, dtype=np.ubyte).reshape(img.height(), img.width(), 4)

## view the data as a writable numpy array
arr = np.asarray(ptr).reshape(img.height(), img.width(), 4)
于 2012-07-09T17:20:25.723 に答える