@[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
时间关系先写到这,如果有更好的办法请告知小弟,如果有新的问题 小弟也愿意与大家探究一下