You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用同一类显示多源视频流时色彩闪烁问题排查与解决

多路摄像头流并发显示色彩闪烁问题解决

问题现象

  • 实现了内置2个工作线程的视频处理类,用于完成USB摄像头、IP网络摄像头的视频流采集与画面显示
  • 多路流并行场景下,为每一路视频流单独实例化该类,仅对对应工作线程做重命名区分
  • 单路流运行时所有功能正常,当同时启动1路以上视频流时,画面出现无规律色彩闪烁问题

根因定位

问题出在图像处理流程的变量使用逻辑上:

图像处理链路包含BGR2RGB色彩空间转换、Resize画面缩放、putText文本叠加等步骤,所有处理步骤全程复用同一个图像变量存储中间结果。
多线程并发运行时,不同流实例的图像处理流程会出现变量读写竞争,当前流的中间处理结果可能被其他流的处理逻辑覆写,最终渲染阶段拿到的是被交叉篡改的图像数据,直接表现为色彩闪烁。单流场景下不存在多实例竞争,因此不会触发该问题。

修复方案

将图像处理流程中每一步的中间结果存储变量改为独立命名,切断不同处理步骤、不同流实例之间的变量读写冲突。修改完成后多路流并发运行时的色彩闪烁问题完全解决。

问题代码参考(变量复用)

# 全流程复用同一个img变量,多线程下存在读写竞争
img = stream_capture.read()
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img = cv2.resize(img, (target_width, target_height))
img = cv2.putText(img, stream_label, (20, 40), cv2.FONT_HERSHEY_SIMPLEX, 1, (0,255,0), 2)

修复后代码参考(独立变量存储各阶段结果)

# 每一步处理使用独立命名的变量,避免跨流程读写冲突
raw_frame = stream_capture.read()
rgb_frame = cv2.cvtColor(raw_frame, cv2.COLOR_BGR2RGB)
resized_frame = cv2.resize(rgb_frame, (target_width, target_height))
display_frame = cv2.putText(resized_frame, stream_label, (20, 40), cv2.FONT_HERSHEY_SIMPLEX, 1, (0,255,0), 2)

内容的提问来源于stack exchange,提问作者Chorum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 15:15:31