我使用pyplot来获取图像。看起来默认是彩色图像,但我想得到灰度。我使用下面的代码,但是,在获得灰度图像之前,我需要首先保存彩色图像。有没有办法直接显示和保存灰度图像?
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image
#downsampling
a = sound
R = 2
a=a.reshape(-1,R).mean(axis=1)
Pxx, freqs, bins, im = plt.specgram(a, NFFT=1024, Fs=44100/2,
noverlap=900) #Fs be downsampling
plt.savefig('sp_xyz.png')
image = Image.open('sp_xyz.png').convert("L")
arr = np.asarray(image)
plt.imshow(arr, cmap='gray_r')
答案 0 :(得分:1)
问题How can I convert an RGB image into grayscale in Python?显示了如何通过直接操纵数组或通过PIL将numpy数组转换为灰度数的不同方法。
然而,在这里的问题的情况下,您不需要转换任何东西,因为光谱图alread是具有单个通道的阵列(因此是灰度图像)。
现在取决于你想做什么。如果要将结果数组(Pxx
)保存为图像,可以使用
plt.imsave('sp_xyz.png', Pxx, cmap="gray")
如果要将绘制的光谱图保存到轴中,但使用灰色色图,
Pxx, freqs, bins, im = plt.specgram(x, NFFT=NFFT, Fs=Fs, noverlap=900, cmap="gray")
plt.savefig('sp_xyz.png')