在Python中对图像背景进行绘图

46
我希望使用matplotlib在图片背景上绘制图表。我在matlab中找到了如何实现的方法http://www.peteryu.ca/tutorials/matlab/plot_over_image_background
我尝试了一些基础的代码,例如:
im = plt.imread("dd.png")
implot = plt.imshow(im)
theta=np.linspace(0,2*np.pi,50)
z=np.cos(theta)*39+145
t=np.sin(theta)*39+535-78+39
plt.plot(z,t)
plt.show()

但它给了我一些非常丑陋的东西:

非常丑陋的东西


2
imshow 可以接受更多的参数,让您指定图像在坐标空间中的位置和大小。默认情况下,左上角位于 (0, 0),每个像素的宽度和高度为1x1单位。 - Paul H
1个回答

170

就像你链接的 MATLAB 示例一样,在调用 imshow 函数时,必须指定图像的所需范围。

默认情况下,matplotlib 和 MATLAB 都将图像的左上角作为原点,从那里向下和向右延伸,并在坐标空间中将每个像素设置为 1x1 的正方形。这就是你的图像所做的事情。

您可以使用 extent 参数控制它,其形式为列表 [left, right, bottom, top]

如果不使用 extent,则会像这样:

import matplotlib.pyplot as plt
img = plt.imread("airlines.jpg")
fig, ax = plt.subplots()
ax.imshow(img)

图片描述

您可以看到,这是一张1600 x 1200像素的图片,显示塞缪尔·杰克逊在航班上因为蛇而变得相当恼火。

但如果我们想要在这个图片上绘制一个在两个维度上跨越从0到300的线,我们就可以轻松地做到:

fig, ax = plt.subplots()
x = range(300)
ax.imshow(img, extent=[0, 400, 0, 300])
ax.plot(x, x, '--', linewidth=5, color='firebrick')

enter image description here

我不知道这条线是否能帮助杰克逊先生解决他的蛇问题,但至少不会让事情变得更加困难。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接