python pyqt5图片(QPixmap)和opencv图片数据结构相互转换

python pyqt5图片(QPixmap)和opencv图片数据结构相互转换

在python中使用pyqt5和opencv混合编程时,有时需要两种图片数据结构的相互转换。网上比较多的是把opencv的图片转换成qt使用的图片,师兄很牛逼会反过来转换。

QPixmap转opencv

不需要另外转换通道

import cv2
import numpy as np
from PyQt5.QtGui import *

def qtpixmap_to_cvimg(qtpixmap):

    qimg = qtpixmap.toImage()
    temp_shape = (qimg.height(), qimg.bytesPerLine() * 8 // qimg.depth())
    temp_shape += (4,)
    ptr = qimg.bits()
    ptr.setsize(qimg.byteCount())
    result = np.array(ptr, dtype=np.uint8).reshape(temp_shape)
    result = result[..., :3]

    return result

opencv转QImage

注意是QImage不是QPixmap,需要的使用QtGui.QPixmap()再转换下就好了。

import cv2
import numpy as np
from PyQt5.QtGui import *

def cvimg_to_qtimg(cvimg):

    height, width, depth = cvimg.shape
    cvimg = cv2.cvtColor(cvimg, cv2.COLOR_BGR2RGB)
    cvimg = QImage(cvimg.data, width, height, width * depth, QImage.Format_RGB888)

    return cvimg

你可能感兴趣的:(python pyqt5图片(QPixmap)和opencv图片数据结构相互转换)