首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用matplotlib.figure.Figure处理openCV

使用matplotlib.figure.Figure处理openCV
EN

Stack Overflow用户
提问于 2020-12-26 13:56:04
回答 2查看 769关注 0票数 1

我正在使用下面的代码找到一个信号的谱图并保存它。

代码语言:javascript
运行
复制
spec,freq,t,im = plt.specgram(raw_signal,Fs=100,NFFT=100,noverlap=50)
plt.axis('off')
figure = plt.gcf()
figure.set_size_inches(12, 1)
plt.savefig('spectrogram',bbox_inches = 'tight',pad_inches=0)

但我有多个像这样的光谱图,我需要的最终产品是所有这些的连接。现在,我要做的是,像前面一样使用plt.savefig()保存所有这些单独的图像,并使用cv2.imread()读取它们并将它们连接起来。但我认为这个过程不是很好。那么,我有没有其他方法可以做到这一点,而不保存和重新阅读呢?

我有一个可能的想法,就是以某种方式将matplotlib.figure.Figure转换成一种可以由OpenCV (特别是cv2)处理的格式。但是,它也不应该有白色的填充。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-26 17:45:22

您可以使用buffer_rgba作为数组来获取图像(不要忘记首先对图像进行draw )。然后在OpenCV中,您需要将图像从RGB转换为OpenCV的BGR通道排序。

代码语言:javascript
运行
复制
import matplotlib.pyplot as plt
import numpy as np
import cv2

raw_signal =  np.random.random(1000)
spec,freq,t,im = plt.specgram(raw_signal,Fs=100,NFFT=100,noverlap=50)
plt.axis('off')
figure = plt.gcf()
figure.set_size_inches(12, 1)
figure.set_dpi(50)

figure.canvas.draw()

b = figure.axes[0].get_window_extent()
img = np.array(figure.canvas.buffer_rgba())
img = img[int(b.y0):int(b.y1),int(b.x0):int(b.x1),:]
img = cv2.cvtColor(img, cv2.COLOR_RGBA2BGRA)
cv2.imshow('OpenCV',img)

顶部: matplotlib,底部OpenCV:

票数 1
EN

Stack Overflow用户

发布于 2020-12-27 00:21:32

不要保存这个数字。matplotlib碰巧有一个以这种方式显示时间序列数据的方便函数,但这不是处理光谱图的方法。任何对谱图“图片”的处理都是一种假象。

使用scipy.signal.spectrogram获取实际的谱图。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65457097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档