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

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日

悬赏问题

  • ¥15 oracle数据库备份、
  • ¥15 关于Finetune模型,CUDA error: device-side assert triggered 报错
  • ¥15 能将阿里云上多个设备的信息能上传给小程序吗
  • ¥50 QT6.7 Camera预览窗口,camera分辨率设置
  • ¥15 车机是安卓4.4.3,车机没有gps,我想用外置蓝牙gps。所以在用安卓模拟位置服务时候,我下载的相关软件不显示在列表里
  • ¥15 matlab水位控制系统(详解)
  • ¥15 CST软件仿真,已知中心线方程构建图形
  • ¥15 supLink 用户定位
  • ¥15 odoo17生产成品入出库会计日记账设置及自动产生会计分录
  • ¥15 MCU控制20V PWM波输出的控制电路