【问题标题】:Convert QPixmap to Numpy将 QPixmap 转换为 Numpy
【发布时间】:2016-05-31 18:17:51
【问题描述】:

为了将 numpy 矩阵转换为 QPixmap,我使用了这个函数:

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)

现在怎么做逆运算?

【问题讨论】:

    标签: python numpy pyqt4


    【解决方案1】:

    这是我不久前为某个爱好项目编写的函数...

    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)
    

    【讨论】:

      猜你喜欢
      • 2017-12-14
      • 1970-01-01
      • 1970-01-01
      • 2013-05-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-01
      • 2016-03-17
      • 2014-11-15
      相关资源
      最近更新 更多