Python 反向整形会产生不同的结果
我需要调整大小,然后重塑某些图像。然后,我想应用反向整形,这应该给原始图片,但它不工作。让我们看看这个代码:Python 反向整形会产生不同的结果,python,numpy,Python,Numpy,我需要调整大小,然后重塑某些图像。然后,我想应用反向整形,这应该给原始图片,但它不工作。让我们看看这个代码: images=[] image = imread('1.png') resized = np.resize(image, (320, 440)) images.append(resized) arr=np.asarray(images) newArray=arr.astype('float32') plt.figure(figsize=[5, 5]) reshaped = np.re
images=[]
image = imread('1.png')
resized = np.resize(image, (320, 440))
images.append(resized)
arr=np.asarray(images)
newArray=arr.astype('float32')
plt.figure(figsize=[5, 5])
reshaped = np.reshape(newArray[0], (320,440))
plt.imshow(reshaped, cmap='gray')
plt.show()
原始图片1.png
:
plt.show()显示的重塑图片:
反整形后的图像与原来的不一样,有人能告诉我问题出在哪里吗?谢谢。编辑:
澄清后,混淆似乎来自np.resize
,它不是图像处理操作,也不用于在保留内容的同时重新缩放图像
看起来像是从scipy
库中删除了图像处理包装,如imresize
,虽然原则上可以使用scipy.interpolate
包来重现imresize
的功能,但我建议您使用pillow
或scikit image
带枕头
:
import numpy as np
from PIL import Image
image = Image.open("my_image.jpg")
image = image.resize((224, 224))
image = np.asarray(image) # convert to numpy
使用sckit图像
:
from skimage.transform import resize
image = imread("my_image.jpg")
image = resize(image, (224, 224))
原始答案
np.reformate
将首先散开元素,然后将它们排序为指定的新形状,如您所见,会丢失许多空间关系。很可能,您实际要做的是np.将图像转置
,交换两个轴:
images=[]
image = imread('1.png')
resized = np.resize(image, (320, 440))
images.append(resized)
arr=np.asarray(images)
newArray=arr.astype('float32')
plt.figure(figsize=[5, 5])
transposed = np.transpose(newArray[0])
plt.imshow(transposed, cmap='gray')
plt.show()
调整大小和重塑是两种根本不同的操作!我怀疑
newArray[0]
是罪魁祸首,尝试一下newArray
什么都没有发生,我这样写是因为将来我会在循环中重塑更多图像。我不认为你想在图像或类似图像的数组上使用np.resize
。使用图像大小调整工具np.resize
以一维方式扩展或截断数组,无需缩放或插值。为什么要使用np.resize
?你期望它做什么?您是否在一个可以详细检查的小阵列上对其进行了测试?在调整大小之前,图像的形状是什么?这只是旋转图片。不是我想要的。我不完全清楚你的意图。应用np.resize
后,图像已具有尺寸(320440)。您想对np进行反向操作。调整大小
?您至少需要原始图像尺寸,以及调整大小的形状大于原始图像的条件,否则您将破坏这些边界之外的任何信息。相反的操作很简单:orig_image=resized[:image.shape[0],:image.shape[1]
我正在尝试重新创建此示例中的图像处理函数:。问题ist misc已被弃用,因此它无法正常工作。我也有自己的数据集,尺寸为320x440。我承认,在我的代码中可能会有更多的错误和错误,我是python新手。啊,我明白了imresize
的功能和意图与np完全不同。resize
,前者是一种图像处理操作,第二种只是对数组大小/形状的操作,而不是为图像设计的(其中数组数据具有空间意义)。由于本教程使用了scikit图像
,因此只需使用skimage.transform.resize
。我使用了您编写的枕头方法,现在我可以调整图片的大小,但在将其设置为asaray和astype(float)后,我无法对其进行重塑。这是错误:ValueError:无法将大小为150528的数组重塑为形状(224)。你知道发生了什么事吗?