gpt4 book ai didi

python - 在不保存图像的情况下使用 matplotlib 时删除图像周围的白色边框

转载 作者:太空宇宙 更新时间:2023-11-03 14:45:36 29 4
gpt4 key购买 nike

我有以下代码:

#load in image
image = cv2.imread('lenna.png')
title = "foo"

ax = plt.axes([0,0,1,1])
ax.clear()
height, width = image.shape[:2]
ax.axis('off')
ax.set_title(title)

#some things plotted etc.

但是我需要这个数字作为 numpy 数组来进行进一步的计算,所以我正在做以下事情:

masked_image = image
ax.imshow(masked_image.astype(np.uint8),interpolation="nearest")
ax.figure.canvas.draw()
w,h = ax.figure.get_size_inches()*ax.figure.get_dpi()
I = np.fromstring(ax.figure.canvas.tostring_rgb(),dtype=np.uint8).reshape(int(h),int(w),3)

#Has the white borders around it
Image.fromarray(I)

但是,I 周围仍然有白色边框,有没有一种简单的方法可以在不保存图形的情况下去除白色边框?

我使用的图像如下:

enter image description here

周围没有任何白色边框

但是在上面的代码之后,它看起来像下面这样: enter image description here

现在周围有白条。

其他已经发布的解决方案都是依赖于保存图像,我不想要

最佳答案

是否保存图形实际上并不重要。图像周围没有空白需要满足两个条件。

1。图边距

您需要在轴和图形边缘之间没有空间。这可以通过设置子图参数来实现

fig, ax = plt.subplots()
fig.subplots_adjust(0,0,1,1)

或通过手动设置轴位置

fig= plt.figure()
fig.add_axes([0,0,1,1])

后者是你在问题中采用的方法,所以这部分没问题。

2。图形方面

图像以相等的纵横比显示,这意味着每个像素都是正方形的。这通常是图像所需要的,但它会导致轴不会向两个方向均等地扩展。
您在这里遇到的问题是由图形与图像的外观不同引起的。

假设您有一个形状为 (n,m) 的图像(m 像素宽,n 像素高);那么图像周围没有空白的必要条件是

n/m == h/w

其中wh分别是图形的宽度和高度。

所以你可以直接将图形大小设置为数组形状乘以dpi,

fig, ax = plt.subplots(figsize=(m*100,n*100), dpi=100)

或任何其他倍数,以防您不需要在输出中每个像素一个像素。如果您根本不关心图形大小,但仍然需要与图像具有相同纵横比的图形,您可以使用 figaspect

figsize=plt.figaspect(image)

为了在此处提供完整的工作示例,下面创建了一个图形,其图像周围没有空白。

import matplotlib.pyplot as plt
import numpy as np

a = np.random.rand(5,3)

fig, ax = plt.subplots(figsize=plt.figaspect(a))
fig.subplots_adjust(0,0,1,1)
ax.imshow(a)

plt.show()

关于python - 在不保存图像的情况下使用 matplotlib 时删除图像周围的白色边框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49693560/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com