背景
自己使用PyQt5开发了一个界面,需要在界面的某个标签上显示opencv-python处理后的图像, 原来使用的代码段如下:
img_rgb = cv2.cvtColor(cvimage, cv2.COLOR_BGR2RGB)
cv2.imwrite('2.jpg',img_rgb)
qimg = QImage(img_rgb.data, img_rgb.shape[1], img_rgb.shape[0], QImage.Format_RGB888)
pixmap = QPixmap.fromImage(qimg)
image = pixmap.toImage()
image.save("saved_image.png")
保存后发现,opencv处理后的图像img_rgb是正常的,但是转换成QPixmap格式后,保存的图片确是有问题的,不知何故?郁闷...............................
分析
当将OpenCV处理后的图像转换成QPixmap
格式图像时,出现无彩色且中间有一条黑线的情况可能是由于图像数据格式的转换问题导致的。通常情况下,OpenCV读取的图像是以BGR格式存储的,而Qt中的QImage
和QPixmap
默认使用的是RGB格式。因此,在将OpenCV处理后的图像转换成QPixmap
格式图像时,需要进行格式转换。
以下是一个示例代码,演示了如何将OpenCV处理后的图像转换成QPixmap
格式图像并解决可能出现的无彩色和黑线问题:
import cv2
from PyQt5.QtGui import QImage, QPixmap
from PyQt5.QtWidgets import QApplication, QLabel
def cvimage_to_qpixmap(cvimage):
height, width, channel = cvimage.shape
bytesPerLine = 3 * width
qimage = QImage(cvimage.data, width, height, bytesPerLine, QImage.Format_RGB888)
qpixmap = QPixmap.fromImage(qimage.rgbSwapped())
return qpixmap
# 读取OpenCV处理后的图像
cvimage = cv2.imread("processed_image.png")
# 将OpenCV处理后的图像转换成QPixmap格式图像
qpixmap = cvimage_to_qpixmap(cvimage)
# 创建一个标签显示QPixmap格式图像
app = QApplication([])
label = QLabel()
label.setPixmap(qpixmap)
label.show()
app.exec_()
在这个示例中,cvimage_to_qpixmap()
函数用于将OpenCV处理后的图像转换成QPixmap
格式图像。我们在转换过程中指定了QImage.Format_RGB888
格式,并使用rgbSwapped()
函数进行颜色通道的转换,以确保正确显示彩色图像。
结果
虽然不是很明白上面转换函数的意思,但是问题成功结局了,美美哒。