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

如何将生成的Scalogram按指定分辨率保存为JPG到指定目录?

实现Scalogram图像的指定分辨率保存与批量处理

单文件保存修改

在现有代码基础上,替换或补充plt.show()为plt.savefig(),即可将生成的Scalogram以指定分辨率保存为JPG格式到目标目录:

import cv2
from scipy import signal
import numpy as np
import pywt
import matplotlib.pyplot as plt
from ssqueezepy import cwt
from ssqueezepy.visuals import plot, imshow
import librosa
import os

# 创建输出目录(不存在则自动创建)
output_dir = "scalogram_output"
os.makedirs(output_dir, exist_ok=True)

y,sr = librosa.load("genres_original/classical/classical.00000.wav")

Wx, scales = cwt(y, 'morlet')
imshow(Wx, yticks=scales, abs=1,
       title="abs(CWT) | Morlet wavelet",
       ylabel="scales", xlabel="samples")

# 保存图像:指定路径、分辨率、格式,避免元素被裁剪
plt.savefig(os.path.join(output_dir, "classical_00000_scalogram.jpg"), 
            dpi=300,  # 分辨率,可根据需求调整(如150、300)
            format='jpg', 
            bbox_inches='tight')
plt.close()  # 关闭图像释放内存

批量读取目录WAV文件并保存

如果需要处理目录下所有WAV文件,可通过遍历目录实现批量生成与保存:

import cv2
from scipy import signal
import numpy as np
import pywt
import matplotlib.pyplot as plt
from ssqueezepy import cwt
from ssqueezepy.visuals import plot, imshow
import librosa
import os
from pathlib import Path

# 输入WAV目录与输出图像目录
input_dir = "genres_original/classical"
output_dir = "scalogram_output/classical"

# 创建输出目录
os.makedirs(output_dir, exist_ok=True)

# 遍历目录下所有WAV文件
for wav_path in Path(input_dir).glob("*.wav"):
    # 加载音频文件
    y, sr = librosa.load(wav_path)
    # 生成Scalogram
    Wx, scales = cwt(y, 'morlet')
    imshow(Wx, yticks=scales, abs=1,
           title=f"abs(CWT) | Morlet wavelet - {wav_path.stem}",
           ylabel="scales", xlabel="samples")
    # 生成保存路径(使用原音频文件名命名图像)
    save_path = os.path.join(output_dir, f"{wav_path.stem}_scalogram.jpg")
    # 保存图像
    plt.savefig(save_path, dpi=300, format='jpg', bbox_inches='tight')
    plt.close()  # 关闭当前图像,避免内存占用过高

关键参数说明

  • dpi: 控制图像分辨率,数值越高图像越清晰(如300dpi适合印刷,150dpi适合网页)
  • format='jpg': 指定保存格式为JPG
  • bbox_inches='tight': 确保图像中的标题、坐标轴标签等元素不会被裁剪
  • plt.close(): 批量处理时必须调用,防止内存泄漏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 09:52:45