x
은 에서 0
사이의 값을 갖는 numpy.float32
배열입니다. dB (데시벨) 값입니다. 내가 할 때 (here를 권장)float 배열을 24 비트 RGB 이미지로 렌더링 (예 : PIL 사용)
는 :
Image.fromarray(x, mode='F')
을 나는 그레이 스케일 또는 때때로 거의 검은 색 이미지를 얻을.
[-200, 0]의 float를 Image.fromarray(x, mode='RGB')
과 함께 Python 모듈 PIL로 읽을 수있는 24 비트 RGB 바이트 배열 (색상 표 사용)에 매핑하는 방법은 무엇입니까?
편집 :
필요한 .wav 오디오 파일은 우리가 spectrogram을 플롯하려는 here이다.
import scipy, numpy as np
import scipy.io.wavfile as wavfile
import numpy as np
from PIL import Image
def stft(x, fftsize=1024, overlap=4):
hop = fftsize/overlap
w = scipy.hanning(fftsize+1)[:-1]
return np.array([np.fft.rfft(w*x[i:i+fftsize]) for i in range(0, len(x)-fftsize, hop)])
def dB(ratio):
return 20 * np.log10(ratio+1e-10)
def magnitudedB(frame, fftsize=1024):
w = scipy.hanning(fftsize+1)[:-1]
ref = np.sum(w)/2
return dB(np.abs(frame)/ref)
sr, x = wavfile.read('test.wav')
x = np.float32(x)/2**15
s = magnitudedB(stft(x)).astype(np.float32).transpose()[::-1,]
print "Max %.1f dB, Min %.1f dB" % (np.max(s), np.min(s))
im = Image.fromarray(s+200, mode='F')
im.show()
참고 :
색상 맵은 그레이 스케일이다, 어떻게 다른 컬러 맵을 얻기 위해 여기
테스트에 어떤 코드? 같은 this one내 유일한 요구 사항은 출력 이미지 또는 wxPython에 프레임/캔버스 (는 PIL의
im = Image.fromarray(...)
다음ImageTk.PhotoImage(image=im)
잘 작동)는 Tkinter를 프레임/캔버스로 읽을 수 있다는 것입니다.
는'matplotlib.pyplot.imshow (X)를'사용하지 않는 이유는 어떤 이유가 있나요? –
@Basj 게임 할 데이터가 있습니까? 그걸 줄께 – BPL
@NikolasRieble 질문에 몇 가지 코드를 추가하고 왜 원하는 출력이되어야하는지에 대한 몇 가지주의 사항이 있습니다. 출력 이미지는 Tkinter 프레임/캔버스 또는 wxPython 프레임/캔버스로 읽혀 져야합니다. – Basj