matplotlib将figure转化为numpy的array矩阵格式

最近碰到一个问题,python读入视频,并处理每一张图片,并将处理的结果用quiver显示为矢量图,然后将矢量图转化为numpy数据。

在这整个过程中碰到以下问题:

  • 1)怎么使用quiver,这个用起来有很多参数需要设置,没有MATLAB用起来方便,不过这个不是本博文的重点。
  • 2)怎么将矢量图的效果转化为numpy数据,这个我在百度上搜索了好多博文,但是都不是我想要的效果,当我科学上网时,发现matplotlib有官方的介绍,这里贴出链接
  • 3)成功的转化为numpy后,又发现我的数据又多了轴参数,致使整个图像向右上角偏移,解决方案如参考所示

处理完整个过程花费了我三四天的时间,希望各位在学习的过程中少点盲点,完整的处理的示例如下所示:

示例

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.figure import Figure
from matplotlib.backends.backend_agg import FigureCanvasAgg
import cv2

img = cv2.imread('dog.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 进行自己的处理
# ...

# 显示图像
fig = plt.figure('quiver矢量化的图片')
plt.imshow(img, cmap='gray')
ax = plt.gca()
# -------------------------------- #
ax.quiver(img.shape[1]//2, img.shape[0]//2, 5, 5, color='r',
                  scale_units='xy', scale=0.4, width=0.0015, headwidth=5, headlength=5, headaxislength=2.5)
# ......
# ---------------------------------#

# 彻底取消轴
plt.axis('off')

fig.set_size_inches(img.shape[1]/100, img.shape[0]/100)  # 输出width*height像素
plt.gca().xaxis.set_major_locator(plt.NullLocator())
plt.gca().yaxis.set_major_locator(plt.NullLocator())
plt.subplots_adjust(top=1, bottom=0, left=0, right=1, hspace=0, wspace=0)
plt.margins(0, 0)

# 转化为numpy数据
canvas = FigureCanvasAgg(plt.gcf())
canvas.draw()
img = np.array(canvas.renderer.buffer_rgba())

# 保存图片
plt.savefig('dog.png', bbox_inches = 'tight')

结果图


参考:https://blog.csdn.net/weixin_42618420/article/details/86218630

  • 1
    点赞
  • 5
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:技术黑板 设计师:CSDN官方博客 返回首页
评论

打赏作者

进击的Explorer

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值