matplotlib画图与图像合成

@[TOC]以图像为背景matplotlib画图

本文作用

首先,欢迎各位大佬来浏览小弟写的博客。今天小弟遇到一个问题,原来的输出结果不能直观的反映一些问题(与实际脱轨),为了方便数学模型输出结果与实际对应,需要将matplotlib输出的结果 以实际照片为背景

首先面对这个需求,想要用matplotlib直接实现是最方便的。但是奈何不知道怎么样才能使matplotlib做到以真实图片为背景进行画图,当然如果opencv用的好的话 可以直接用。我是觉得用opencv一根一根画比较麻烦,所以就想了很多办法,最终就想到了matplotlib输出图片,与原来的图像叠加来实现。
先上效果图把

做出的结果
花了两三个小时才完成这一张图,遇到问题良多。废话不多说,下面说一下正确做法 然后在列举一下小弟踩的坑给兄弟们指个路。

from PIL import  Image
import math
img1 = Image.open('./data/strack.jpg')
img2 = Image.open('./data/12_25.png')
img1 = img1.convert('RGBA')
img2 = img2.convert('RGBA')
if not img.size==img2.size:
    img2 = img2.resize((img1.size),Image.BILINEAR)
img = Image.blend(img1, img2,(math.sqrt(5)-1)/2)

然后这么img就是上面这个图片了
img2 读取的是matplotlib画出的图,去掉了坐标轴和坐标轴外面的白边框
img1是地图
(math.sqrt(5)-1)/2是啥 咱也不知道为啥用它,但是大家都说这个是最佳比例

blend就把两张图片叠加起来了

其中会遇到啥问题呢,其实按照上面执行 基本执行能够执行,但是现实结果会差强人意
1.matplotlib画图 注意分辨率,像素点大小,当然设置的是画布的属性,具体怎么设置大家应该都比我会
2.画图自带坐标轴,坐标轴外面还会给你留一圈空白,所以你设置的画布属性 你试着合一下 会居中,但是会按比例缩小

    plt.savefig(img_path,dpi=100,bbox_inches='tight')

bbox_inches这个玩意 大家都说它能让图片变清晰,咱也看不出差距 只知道他能够干掉matplotlib画图坐标轴外表的白边框
3.在这里插入图片描述
这个说明两个图片大小不一 需要resize

时间关系先写到这,如果有更好的办法请告知小弟,如果有新的问题 小弟也愿意与大家探究一下

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值