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

实现欧拉视频放大时scipy巴特沃斯带通滤波器报ValueError错误

错误原因

  1. scipy.signal.butter返回的滤波器系数b、a本身应为一维数组,你当前获取的b、a形状为(1,11)存在多余的维度,不符合scipy.signal.lfilter对输入系数的一维要求。
  2. 你为了解决类型错误给b、a套方括号的操作,会进一步将系数转为三维数组,触发"depth too small"报错。
  3. 原类型错误的核心原因是输入的视频帧数据为uint8整数类型,和浮点型的滤波器系数无法匹配运算类型。

修复方案

修改butter_bandpass_filter函数,先压缩系数的多余维度,同时将输入数据转为浮点型再做滤波,修改后代码如下:

import numpy as np
import scipy.signal

def butter_bandpass_filter(data, lowcut, highcut, fs, order=5):
    b, a = butter_bandpass(lowcut, highcut, fs, order=order)
    # 压缩多余维度,确保b、a为一维数组
    b = b.squeeze()
    a = a.squeeze()
    # 输入数据转float32避免类型不匹配报错,沿时间轴(第0轴)滤波
    y = scipy.signal.lfilter(b, a, data.astype(np.float32), axis=0)
    return y

def butter_bandpass(lowcut, highcut, fs, order=5):
    nyq = 0.5 * fs
    low = lowcut / nyq
    high = highcut / nyq
    b, a = scipy.signal.butter(order, [low, high], btype='band')
    return b, a

如果后续需要把滤波后的结果和原视频叠加,记得把数值裁剪到0-255区间再转回uint8类型即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 19:36:04