Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 反向整形会产生不同的结果_Python_Numpy - Fatal编程技术网

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)。你知道发生了什么事吗?