在Matplotlib中相对于彼此绘制图像

3
我是一名有用的助手,可以翻译文本。
我正在开发一个带有向下摄像头的机器人。为了展示我的定位滤波器的表现,我想在图表中绘制草坪区域和机器人的路径。这意味着我需要在图表中放置旋转的图像。是否可能相对于原点或彼此绘制旋转后的图像?
我想避免使用ndimage.rotate,因为它会旋转图像的数据,而不是轴上的图像数据。
我尝试使用:
import import matplotlib.pyplot as mplplt
import matplotlib.transforms as mpltf
import matplotlib.image as mplimg

grass = mplimg.imread("grass0.png")
grass = mplimg.imread("grass1.png")
fig = mplplt.figure()
ax = mplplt.subplot(111)

#Show previous grass image
ax.imshow(grass, extent = (-5, 5, -5, 5))

#Next image
tf = mpltf.Affine2D().rotate_deg(30).translate(1,1)
ax.imshow(grass1, extent = (-5, 5, -5, 5))#, transform = tf)

mplplt.show()

无济于事,该图像位于先前图像的顶部。

1
OffsetImage 可能是一个不错的起点。http://matplotlib.org/examples/pylab_examples/demo_annotation_box.html - tacaswell
1个回答

1
这是一个关于两张图像的示例,它们分别进行了旋转和平移,并且一张覆盖在另一张上面。需要进行大量的限制调整和Z轴排序,并编写易于理解的函数。我使用了你的代码并进行了修改,http://matplotlib.org/examples/api/demo_affine_image.html
import matplotlib.pyplot as mplplt
import matplotlib.transforms as mpltf
import matplotlib.image as mplimg

def imshow_affine(ax, z, *kl, **kwargs):
    im = ax.imshow(z, *kl, **kwargs)
    x1, x2, y1, y2 = im.get_extent()
    im._image_skew_coordinate = (x2, y1)
    return im

grass = mplimg.imread("hammer_map.png")
fig = mplplt.figure()
ax = mplplt.subplot(111)

tf = mpltf.Affine2D().rotate_deg(30).translate(-1,-1) + ax.transData
im1 = imshow_affine(ax, grass, interpolation='none',
                        origin='lower',
                        extent=[1, 7, 0, 5], clip_on=False, zorder=2)

im1.set_transform(tf)

tf = mpltf.Affine2D().rotate_deg(190).translate(-2,1) + ax.transData
im2 = imshow_affine(ax, grass, interpolation='none',
                        origin='lower',
                        extent=[-3, 3, -2, 3], clip_on=False, zorder=1)

im2.set_transform(tf)

mplplt.show()

enter image description here


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