QImage に画像があり、表示する前に PIL で処理したいと考えています。ImageQT クラスを使用すると PIL イメージを QImage に変換できますが、QImage から PIL イメージに変換するものはないようです。
7229 次
6 に答える
13
次のコードで QImage から PIL に変換します。
img = QImage("/tmp/example.png")
buffer = QBuffer()
buffer.open(QIODevice.ReadWrite)
img.save(buffer, "PNG")
strio = cStringIO.StringIO()
strio.write(buffer.data())
buffer.close()
strio.seek(0)
pil_im = Image.open(strio)
動作させる前に、多くの組み合わせを試しました。
于 2009-11-18T14:59:01.577 に答える
2
#Code for converting grayscale QImage to PIL image
from PyQt4 import QtGui, QtCore
qimage1 = QtGui.QImage("t1.png")
bytes=qimage1.bits().asstring(qimage1.numBytes())
from PIL import Image
pilimg = Image.frombuffer("L",(qimage1.width(),qimage1.height()),bytes,'raw', "L", 0, 1)
pilimg.show()
于 2010-08-30T23:19:29.723 に答える
2
from PyQt5 import QtGui
from PIL import Image
img = QtGui.QImage(width, height, QImage.Format_RGBA8888)
data = img.constBits().asstring(img.byteCount())
pilimg = Image.frombuffer('RGBA', (img.width(), img.height()), data, 'raw', 'RGBA', 0, 1)
from PyQt4 import QtGui
from PIL import Image
img = QtGui.QImage("greyScaleImage.png")
bytes = img.bits().asstring(img.numBytes())
pilimg = Image.frombuffer('L', (img.width(), img.height()), bytes, 'raw', 'L', 0, 1)
pilimg.show()
Eli Bendersky に感謝します。あなたのコードは役に立ちました。
于 2010-08-27T21:12:46.570 に答える
2
別のルートは次のとおりです。
- 画像データを numpy 配列にロードします ( PIL を使用したコード例)
- numpy、scipy、または scikits.image を使用して画像を操作します。
- データを QImage にロードします (例: scikits.image アーカイブ (1 にリンク) をブラウズし、qt_plugin.py の 45 行目を見てください。申し訳ありませんが、stackoverflow ではまだリンクを投稿できません)。
Virgil が言及しているように、データは 32 ビット (または 4 バイト) でアラインされている必要があります。つまり、ステップ 3 でストライドを指定することを覚えておく必要があります (スニペットに示されているように)。
于 2009-11-19T23:07:44.883 に答える
0
QImage を Python 文字列に変換できます。
>>> image = QImage(256, 256, QImage.Format_ARGB32)
>>> bytes = image.bits().asstring(image.numBytes())
>>> len(bytes)
262144
これを PIL に変換するのは簡単です。
于 2009-11-14T06:32:03.450 に答える
0
PySide2 5.x
これは、 qt の公式の python ラッピングであるを使用している人への回答です。彼らはまたのために働くべきですPyQt 5.x
また、これと組み合わせて使用したものに追加しましたQImage
。主に、カラー チャネルの変更を追跡する必要がないため、依存関係numpy
を使用することを好みます。PIL
from PySide2 import QtCore, QtGui
from PIL import Image
import io
def qimage_to_pimage(qimage: QtGui.QImage) -> Image:
"""
Convert qimage to PIL.Image
Code adapted from SO:
https://stackoverflow.com/a/1756587/7330813
"""
bio = io.BytesIO()
bfr = QtCore.QBuffer()
bfr.open(QtCore.QIODevice.ReadWrite)
qimage.save(bfr, 'PNG')
bytearr = bfr.data()
bio.write(bytearr.data())
bfr.close()
bio.seek(0)
img = Image.open(bio)
return img
ここに変換するnumpy.ndarray
ものがありますQImage
from PIL import Image, ImageQt
import numpy as np
def array_to_qimage(arr: np.ndarray):
"Convert numpy array to QImage"
img = Image.fromarray(arr)
return ImageQt.ImageQt(img)
于 2019-04-30T01:38:52.620 に答える