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

OpenCV调用imshow播放视频resize缩放后出现窗口闪烁问题求助

问题原因

  • 核心触发点是你对同一个窗口名Video连续调用了两次cv.imshow():先输出原分辨率帧,立刻又输出缩放后的帧,两个不同尺寸的帧反复在同一个窗口渲染,自然会出现闪烁效果
  • 次要原因:cv.waitKey(20)对应的是50fps的刷新间隔,你的原视频是60fps,帧刷新节奏不匹配也可能加重闪烁问题
  • 笔误问题:你代码末尾的cv.destroyAllwindows()拼写错误,正确应为cv.destroyAllWindows()(首字母W大写),虽然不是闪烁直接原因,但会导致窗口无法正常销毁,可能引发后续运行的异常。

解决方法

1. 移除重复的imshow调用

如果只需要播放缩放后的视频,删掉cv.imshow('Video', frame)这一行即可,修改后的循环逻辑如下:

while True:
    isTrue, frame = capture.read()
    # 补充判断视频读取结束的逻辑,避免读取到空帧时报错
    if not isTrue:
        break
    frame_resized = rescaleFrame(frame, scale=0.2)
    # 仅输出缩放后的帧到窗口
    cv.imshow('Video', frame_resized)
    # 60fps对应的等待时间约为16ms,调整更适配原视频帧率
    if cv.waitKey(16) & 0xFF == ord('d'):
        break
capture.release()
# 修正拼写错误
cv.destroyAllWindows()

2. 如果需要同时播放原视频和缩放后视频,给两个窗口设置不同的名称

# 原视频输出到Original Video窗口,缩放后输出到Resized Video窗口
cv.imshow('Original Video', frame)
cv.imshow('Resized Video', frame_resized)

3. 额外优化(可选)

如果调整后仍有轻微闪烁,可以修改resize的插值方式为cv.INTER_LINEAR,该插值方式更适合视频场景的缩放,运算速度也更快。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 07:24:05