2016-05-31 29 views
1

要轉換numpy的矩陣的QPixmap,我用這個函數:轉換的QPixmap到numpy的

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) 

現在該怎麼做相反的操作?

回答

2

這裏是我寫的一些愛好項目,而前一個功能...

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)