本文介绍了将 QPixmap 转换为 Numpy的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
要将 numpy 矩阵转换为 QPixmap,我使用了这个函数:
To convert numpy matrix to QPixmap, I use this function:
def np2qpixmap(np_img):
frame = cv2.cvtColor(np_img, cv2.COLOR_BGR2RGB)
img = QtGui.QImage(frame, frame.shape[1], frame.shape[0], QtGui.QImage.Format_RGB888)
return QtGui.QPixmap.fromImage(img)
现在如何做逆运算?
推荐答案
这里是我前段时间为某个业余项目写的一个函数...
Here is a function I wrote for some hobby project a while ago...
import copy
import numpy as np
def qt_image_to_array(img, share_memory=False):
""" Creates a numpy array from a QImage.
If share_memory is True, the numpy array and the QImage is shared.
Be careful: make sure the numpy array is destroyed before the image,
otherwise the array will point to unreserved memory!!
"""
assert isinstance(img, QtGui.QImage), "img must be a QtGui.QImage object"
assert img.format() == QtGui.QImage.Format.Format_RGB32, \
"img format must be QImage.Format.Format_RGB32, got: {}".format(img.format())
img_size = img.size()
buffer = img.constBits()
# Sanity check
n_bits_buffer = len(buffer) * 8
n_bits_image = img_size.width() * img_size.height() * img.depth()
assert n_bits_buffer == n_bits_image, \
"size mismatch: {} != {}".format(n_bits_buffer, n_bits_image)
assert img.depth() == 32, "unexpected image depth: {}".format(img.depth())
# Note the different width height parameter order!
arr = np.ndarray(shape = (img_size.height(), img_size.width(), img.depth()//8),
buffer = buffer,
dtype = np.uint8)
if share_memory:
return arr
else:
return copy.deepcopy(arr)
这篇关于将 QPixmap 转换为 Numpy的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!