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