Convert PyQt5 QPixmap to numpy ndarray

谁都会走 提交于 2019-12-06 06:20:32

问题


I have pixmap:

pixmap = self._screen.grabWindow(0,
                                 self._x, self._y,
                                 self._width, self._height)

I want to convert it to OpenCV format. I tried to convert it to numpy.ndarray as described here but I got error sip.voidptr object has an unknown size

Is there any way to get numpy array (same format as cv2.VideoCapture read method returns)?


回答1:


I got numpy array using this code:

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)) 



回答2:


The copy can be avoided by doing:

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))


来源:https://stackoverflow.com/questions/45020672/convert-pyqt5-qpixmap-to-numpy-ndarray

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!