翔天烈燕 2022-06-18 00:36 采纳率: 0%
浏览 138

PyQt5 opencv 播放视频时,单帧图像颜色显示错误,如何解决?

问题遇到的现象和发生背景

PyQt5 opencv 播放视频,先读取第一帧图片显示出来,图片储存在frame中,但是显示出的图片颜色是错的?

问题相关代码,请勿粘贴截图
self.video = cv2.VideoCapture(address)
self.fps = self.video.get(cv2.CAP_PROP_FPS)
ret, frame = self.video.read()
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
self.label_video.setScaledContents(True)
self.label_video.setGeometry(QtCore.QRect(80, 10, int(frame.shape[1] / 3), int(frame.shape[0] / 3)))
img = QImage(frame.data, frame.shape[1], frame.shape[0], frame.shape[1] * 3, QImage.Format_RGB888)
self.label_video.setPixmap(QPixmap.fromImage(img))
self.label_video.show()
运行结果及报错内容

显示的颜色有误,如下图

img

我的解答思路和尝试过的方法

知道opencv和QImage之间图片要相互转换,但不明白哪里有误

我想要达到的结果

正确显示颜色,如下图

img

  • 写回答

1条回答 默认 最新

  • youcans 领域专家: 人工智能技术领域 2022-06-18 10:01
    关注

    OpenCV 使用 BGR 格式,matplotlib/PyQt 使用 RGB 格式。使用 matplotlib/PyQt 显示 openCV 图像,要将 BGR 格式转换为 RGB 格式.
    图片格式转换:BGR(OpenCV) -> RGB(PyQt5)

    imgRGB = cv2.cvtColor(imgBGR, cv2.COLOR_BGR2RGB)

    【OpenCV 例程200篇】https://blog.csdn.net/youcans/article/details/121169102

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月18日