将 PyQt5 QPixmap 转换为 numpy ndarray
Convert PyQt5 QPixmap to numpy ndarray
我有像素图:
pixmap = self._screen.grabWindow(0,
self._x, self._y,
self._width, self._height)
我想把它转换成OpenCV格式。
我试图按照 here 的描述将其转换为 numpy.ndarray
,但出现错误 sip.voidptr object has an unknown size
有没有办法获取 numpy 数组(格式与 cv2.VideoCapture
read
方法 returns 相同)?
我使用这段代码得到了 numpy 数组:
channels_count = 4
pixmap = self._screen.grabWindow(0, self._x, self._y, self._width, self._height)
image = pixmap.toImage()
s = image.bits().asstring(self._width * self._height * channels_count)
arr = np.fromstring(s, dtype=np.uint8).reshape((self._height, self._width, channels_count))
可以通过以下方式避免复制:
channels_count = 4
pixmap = self._screen.grabWindow(0, self._x, self._y, self._width, self._height)
image = pixmap.toImage()
b = image.bits()
# sip.voidptr must know size to support python buffer interface
b.setsize(self._height * self._width * channels_count)
arr = np.frombuffer(b, np.uint8).reshape((self._height, self._width, channels_count))
这是一个函数:
def QPixmapToArray(pixmap):
## Get the size of the current pixmap
size = pixmap.size()
h = size.width()
w = size.height()
## Get the QImage Item and convert it to a byte string
qimg = pixmap.toImage()
byte_str = qimg.bits().tobytes()
## Using the np.frombuffer function to convert the byte string into an np array
img = np.frombuffer(byte_str, dtype=np.uint8).reshape((w,h,4))
return img
我有像素图:
pixmap = self._screen.grabWindow(0,
self._x, self._y,
self._width, self._height)
我想把它转换成OpenCV格式。
我试图按照 here 的描述将其转换为 numpy.ndarray
,但出现错误 sip.voidptr object has an unknown size
有没有办法获取 numpy 数组(格式与 cv2.VideoCapture
read
方法 returns 相同)?
我使用这段代码得到了 numpy 数组:
channels_count = 4
pixmap = self._screen.grabWindow(0, self._x, self._y, self._width, self._height)
image = pixmap.toImage()
s = image.bits().asstring(self._width * self._height * channels_count)
arr = np.fromstring(s, dtype=np.uint8).reshape((self._height, self._width, channels_count))
可以通过以下方式避免复制:
channels_count = 4
pixmap = self._screen.grabWindow(0, self._x, self._y, self._width, self._height)
image = pixmap.toImage()
b = image.bits()
# sip.voidptr must know size to support python buffer interface
b.setsize(self._height * self._width * channels_count)
arr = np.frombuffer(b, np.uint8).reshape((self._height, self._width, channels_count))
这是一个函数:
def QPixmapToArray(pixmap):
## Get the size of the current pixmap
size = pixmap.size()
h = size.width()
w = size.height()
## Get the QImage Item and convert it to a byte string
qimg = pixmap.toImage()
byte_str = qimg.bits().tobytes()
## Using the np.frombuffer function to convert the byte string into an np array
img = np.frombuffer(byte_str, dtype=np.uint8).reshape((w,h,4))
return img