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

RuntimeWarning:log运算遇除零错误及绘图Frames轴范围缩小问题

问题解决方案

1. 解决RuntimeWarning: divide by zero encountered in log

警告的核心原因是min_width/1.8的值为0(或≤0),而np.log()要求参数必须严格大于0。以下是两种可行处理方案:

  • 添加参数合法性校验:在计算对数前过滤无效输入,避免非法值传入np.log():

    min_width = (min(widths_in_frame) * 0.00633217993)
    # 仅当min_width有效时记录数据
    if min_width > 0:
        log_val = np.log(min_width / 1.8)
        widths.append(log_val)
        frames.append(cap.get(cv2.CAP_PROP_POS_FRAMES))
    else:
        # 可选:打印异常提示或记录默认值
        print(f"当前帧min_width无效: {min_width},跳过记录")
    
  • 设置安全阈值保留全量帧数据:如果需要保留所有帧的记录,给输入值设置极小阈值避免触发警告:

    min_width = (min(widths_in_frame) * 0.00633217993)
    # 限制最小值为1e-6,确保log参数合法
    safe_input = max(min_width / 1.8, 1e-6)
    log_val = np.log(safe_input)
    widths.append(log_val)
    frames.append(cap.get(cv2.CAP_PROP_POS_FRAMES))
    

2. 解决Frames轴范围从1600缩小至1400的问题

轴范围缩小通常是因为有效帧记录数量减少,或绘图工具自动缩放导致,对应解决方案如下:

  • 检查帧记录完整性:如果是异常帧被跳过导致数据点减少,可调整上述校验逻辑(比如用阈值方案替代直接跳过),确保所有预期帧都被记录。

  • 手动锁定绘图轴范围:以matplotlib为例,绘图时强制指定x轴范围:

    import matplotlib.pyplot as plt
    plt.plot(frames, widths)
    # 强制设置Frames轴范围为0到1600
    plt.xlim(0, 1600)
    plt.show()
    
  • 验证帧号读取正确性:检查cap.get(cv2.CAP_PROP_POS_FRAMES)是否返回正确帧号。若视频读取存在跳帧,可尝试调整OpenCV读取参数(比如设置cap.set(cv2.CAP_PROP_BUFFERSIZE, 1)减少缓存影响)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 13:09:59