Convert PyQt5 QPixmap to numpy ndarray

前端 未结 3 479
时光说笑
时光说笑 2020-12-17 00:50

I have pixmap:

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


        
相关标签:
3条回答
  • 2020-12-17 01:21

    Heres a function:

    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
    
    0 讨论(0)
  • 2020-12-17 01:43

    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))
    
    0 讨论(0)
  • 2020-12-17 01:47

    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)) 
    
    0 讨论(0)
提交回复
热议问题