当前位置: 首页 > news >正文

pyqt5无法显示opencv绘制文本和掩码信息

背景:pyqt5无法显示opencv绘制的标签和mask;我们在使用YOLO做实例分割做推理时,会使用opencv做后处理结果绘制(含标签绘制和掩码绘制);结果opencv绘制的解码却无法在pyqt的解码上面显示。pyqt转换代码如下:

def convert_frame_to_pixmap(self, frame):"""将OpenCV帧转换为QPixmap,特别优化mask显示"""if frame is None:return QPixmap()# 转换颜色空间(OpenCV的BGR转Qt的RGB)frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)# 确保数据类型正确if frame_rgb.dtype != np.uint8:frame_rgb = cv2.normalize(frame_rgb, None, 0, 255, cv2.NORM_MINMAX, dtype=cv2.CV_8U)# 确保内存连续性if not frame_rgb.flags.contiguous:frame_rgb = np.ascontiguousarray(frame_rgb)h, w, c = frame_rgb.shape# 创建QImage - 使用更可靠的参数qimg = QImage(frame_rgb.data,w,h,frame_rgb.strides[0],  # 直接使用数组的步长QImage.Format_RGB888)# 确保图像不被修改时共享数据,提高性能qimg = qimg.copy()# 转换为QPixmap并按比例缩放pixmap = QPixmap.fromImage(qimg)return pixmap.scaled(self.display_label.width(),self.display_label.height(),Qt.KeepAspectRatio,Qt.SmoothTransformation)

解决: 在使用opencv的imshow可视化看到标签和掩码的结果后,把问题定位在转换和传输。

如果要在qyqt上面显示,首先需要通过pyqt的yqtSignal函数将opencv处理后的帧数据进行传输,然后再将其转换为pyqt的QPixmap。

在转换阶段排查了很久,后来发现不是这个问题。然后问题就定位到传输中和传输前。传输中也不可能,因为能够显示图像,只是无法显示标签和掩码。

来到转换前,这部分的实现是通过处理函数先处理,再将处理后的帧数据传给pyqt的信号槽。最开始是这样实现的:

self.process_frame(frame)
self.update_frame_signal.emit(frame)
self.process_finished_signal.emit()

打断点测试,发现问题出在这,因为frame数据的标签和掩码在传给信号槽之前会丢失。于是改变写法,换成下面这种更加稳健的写法,就把这个问题解决了。当然这是我代码实现的疏忽。

frame, results = self.process_frame(frame)
self.update_frame_signal.emit(frame)
self.process_finished_signal.emit()

在这里插入图片描述

http://www.lryc.cn/news/622427.html

相关文章:

  • OpenCV 阈值处理
  • 应用侧华为云LoTDA设备接入平台
  • 重塑工业设备制造格局:明远智睿 T113-i 的破局之道
  • IgH初始化--未接从站
  • 【160页PPT】机械行业数字化生产供应链产品解决方案(附下载方式)
  • 光伏工单智能管理,故障处理快人一步
  • 状态流程框架(cola-component-statemachine)
  • WinForm 简单用户登录记录器实现教程
  • 五、ZooKeeper、Kafka、Hadoop、HBase、Spark、Flink集群化软件的部署
  • Sui 主网升级至 V1.53.2
  • 【DDIA】第三部分:衍生数据
  • 俄罗斯信封套娃问题-二维最长递增子序列
  • day29-进程和线程(2)
  • python自学笔记9 Seaborn可视化
  • 47.分布式事务理论
  • Elasticsearch:使用 Gradio 来创建一个简单的 RAG 应用界面
  • LeetCode刷题记录----236.二叉树的最近公共节点(medium)
  • 终极手撸cpu系列-详解底层原理-CPU硬核解剖:从0和1到 看透CPU逻辑设计内部原理,弄清楚现代多线程cpu工作原理
  • IC(Integrated Circuit,集成电路)是什么?
  • Qt——常用Widget(控件)
  • 数据结构初阶(17)排序算法——非比较排序、排序算法总结
  • Git、JSON、MQTT
  • 【Javaweb学习|黑马笔记|Day1】初识,入门网页,HTML-CSS|常见的标签和样式|标题排版和样式、正文排版和样式
  • 混凝土抗压强度预测:基于机器学习的全流程实战解析​
  • flume实战:从零配置到启动运行的完整指南
  • 【嵌入式C语言】五
  • 模型输出参数和量化参数一文详解!!
  • Eclipse:关闭项目
  • 腾讯位置商业授权微信小程序逆地址解析(坐标位置描述)
  • 【LeetCode 热题 100】121. 买卖股票的最佳时机