我用图像中的数据制作了一个numpy数组。我想将numpy数组转换为一维数组。
import numpy as np
import matplotlib.image as img
if __name__ == '__main__':
my_image = img.imread("zebra.jpg")[:,:,0]
width, height = my_image.shape
my_image = np.array(my_image)
img_buffer = my_image.copy()
img_buffer = img_buffer.reshape(width * height)
print str(img_buffer.shape)
128x128图像就在这里。
但是,该程序打印出来(128,128)。我希望img_buffer
成为一维数组。我如何重塑这个阵列?为什么numpy不会将数组重新整形为一维数组呢?
答案 0 :(得分:4)
.reshape
返回一个新数组,而不是重新整形。
顺便说一句,您似乎试图获取图像的字节串 - 您可能想要使用my_image.tostring()
。
答案 1 :(得分:1)
reshape
不起作用。您的代码无效,因为您没有将reshape
返回的值分配回img_buffer
。
如果您想将数组展平为一个维度,ravel
或flatten
可能更容易选择。
>>> img_buffer = img_buffer.ravel()
>>> img_buffer.shape
(16384,)
否则,你想做:
>>> img_buffer = img_buffer.reshape(np.product(img_buffer.shape))
>>> img_buffer.shape
(16384,)
或者,更简洁:
>>> img_buffer = img_buffer.reshape(-1)
>>> img_buffer.shape
(16384,)