在matplotlib子图中以实际大小显示不同的图像

kb5ga3dv  于 2023-01-17  发布在  其他
关注(0)|答案(3)|浏览(170)

我正在用python和matplotlib开发一些图像处理算法。我想用子图在图中显示原始图像和输出图像(例如,原始图像紧挨着输出图像)。输出图像与原始图像的大小不同。我希望子图以实际大小显示图像(或均匀缩放),以便我可以比较“苹果对苹果”。我目前用途:

plt.figure()
plt.subplot(2,1,1)
plt.imshow(originalImage)
plt.subplot(2,1,2)
plt.imshow(outputImage)
plt.show()

结果是我得到了子图,但两个图像都被缩放,使它们大小相同(尽管输出图像上的轴与输入图像上的轴不同)。如果输入图像是512 × 512并且输出图像是1024 × 1024,则两个图像被显示为好像它们具有相同的尺寸。
是否有办法强制matplotlib以其各自的实际大小显示图像(这是一个更好的解决方案,这样matplotlib的动态重新缩放不会影响所显示的图像),或者缩放图像,使其以与其实际大小成比例的大小显示?

fkvaft9z

fkvaft9z1#

这就是您正在寻找的答案:

def display_image_in_actual_size(im_path):

    dpi = 80
    im_data = plt.imread(im_path)
    height, width, depth = im_data.shape

    # What size does the figure need to be in inches to fit the image?
    figsize = width / float(dpi), height / float(dpi)

    # Create a figure of the right size with one axes that takes up the full figure
    fig = plt.figure(figsize=figsize)
    ax = fig.add_axes([0, 0, 1, 1])

    # Hide spines, ticks, etc.
    ax.axis('off')

    # Display the image.
    ax.imshow(im_data, cmap='gray')

    plt.show()

display_image_in_actual_size("./your_image.jpg")

改编自here

uttx8gqw

uttx8gqw2#

约瑟夫的回答如下:显然,默认dpi更改为100,因此为了安全起见,将来可以直接从rcParams访问dpi,如下所示

import matplotlib as mpl
import matplotlib.pyplot as plt

def display_image_in_actual_size(im_path):

    dpi = mpl.rcParams['figure.dpi']
    im_data = plt.imread(im_path)
    height, width, depth = im_data.shape

    # What size does the figure need to be in inches to fit the image?
    figsize = width / float(dpi), height / float(dpi)

    # Create a figure of the right size with one axes that takes up the full figure
    fig = plt.figure(figsize=figsize)
    ax = fig.add_axes([0, 0, 1, 1])

    # Hide spines, ticks, etc.
    ax.axis('off')

    # Display the image.
    ax.imshow(im_data, cmap='gray')

    plt.show()

display_image_in_actual_size("./your_image.jpg")
pxyaymoc

pxyaymoc3#

如果要以实际大小显示图像,则子图中两个图像的实际像素大小相同,您可能只需要在子图定义中使用选项sharexsharey

fig, ax = plt.subplots(nrows=1, ncols=2, figsize=(15, 7), dpi=80, sharex=True, sharey=True)
ax[1].imshow(image1, cmap='gray')
ax[0].imshow(image2, cmap='gray')

结果:

其中第二图像是第一图像的1/2大小。

相关问题