pyqt5 QImage QPixmap Opencv图像 相互转换

发布于:2024-04-12 ⋅ 阅读:(120) ⋅ 点赞:(0)

1. Opencv图像 转 QImage

def cvimage_to_qimage(cvimage):  
   image = cv2.cvtColor(cvimage, cv2.COLOR_BGR2RGB)
   qimage = QImage(image.data, image.shape[1], image.shape[0], image.strides[0], QImage.Format_RGB888)
   return qimage

2. Opencv图像 转 QPixmap

只需要加上一行 QPixmap.fromImage(qimage) 即可

def cvimage_to_qpixmap(cvimage):  
   image = cv2.cvtColor(cvimage, cv2.COLOR_BGR2RGB)
   qimage = QImage(image.data, image.shape[1], image.shape[0], image.strides[0], QImage.Format_RGB888)
   return QPixmap.fromImage(qimage)

3. QImage 转 Opencv图像

def qimage_to_cvimage(self, qimage):
    buf = qimage.constBits()  # 获取图像数据的指针
    width, height = qimage.width(), qimage.height()  # 获取图像的宽度和高度
    buf.setsize(qimage.byteCount())  # 设置缓冲区的大小为图像的字节数
    return np.array(buf).reshape(height, width, 4).copy()  # 将缓冲区转换为 NumPy 数组,并重新形状为图像尺寸

4. QPixmap 转 opencv图像

只需要加上一行 qimage = qpixmap.toImage() # 转为Qimage 即可

def qpixmap_to_cvimage(self, qpixmap):
	qimage = qpixmap.toImage() # 转为Qimage
    buf = qimage.constBits()  # 获取图像数据的指针
    width, height = qimage.width(), qimage.height()  # 获取图像的宽度和高度
    buf.setsize(qimage.byteCount())  # 设置缓冲区的大小为图像的字节数
    return np.array(buf).reshape(height, width, 4).copy()  # 将缓冲区转换为 NumPy 数组,并重新形状为图像尺寸

5. QPixmap 转 QImage

qimage = qpixmap.toImage() # 转为Qimage

6. QImage 转 QPixmap

qpixmap = QPixmap.fromImage(qimage) # 转为QPixmap

网站公告

今日签到

点亮在社区的每一天
去签到