在python中调整四维数组的图像

时间:2017-08-18 13:03:01

标签: python python-3.x lasagne

我正在使用Python 3

我有来自unit8类型和尺寸(60000, 1, 28, 28)的可变数据,这意味着我有{1}个图像,其中包含1个频道和60000像素的大小。<登记/> 现在我想将图片大小调整为28x28像素,这样我就可以获得60x60的大小

有人可以帮助我吗?

3 个答案:

答案 0 :(得分:0)

如果您有opencv,可以resize使用,

img = pics[i][0]
new_img = cv2.resize(img, None, fx=2, fy=2, interpolation = cv2.INTER_CUBIC)

现在,您的i图片会从xy方向调整因子2的大小(此处pics是您的{numpy数组(60000, 1, 28, 28) 1}}图片)。如果您不使用opencv,则可以安装它(搜索谷歌)

如果没有,您可以使用PIL包。您可以使用

安装它
pip install Pillow

并使用以下代码调整大小。

from PIL import Image
img = pics[i][0]
im = Image.fromarray(np.rollaxis(img, 0,3))
new_im = im.resize((new_x, new_y), Image.BICUBIC)

您可以使用for loop将这些图片放入(60000, 1, x ,y)

的数组中

答案 1 :(得分:0)

如果您正在使用Keras,请在Keras模型设置中使用

model = Sequential()
model.add(Lambda(lambda x: tf.image.resize_images(x,[66,200]), input_shape=(160,320,3)))

答案 2 :(得分:0)

以下解决方案为我工作。理解列表后,列表将与numpy一起堆叠回批处理:

import cv2
import numpy as np

target_shape = (60, 60)

def _resize_image(image, target):
   return cv2.resize(image, dsize=(target[0], target[1]), interpolation=cv2.INTER_LINEAR)

image = [_resize_image(image=i, target=target_shape) for i in data]
data_batch = np.stack(image, axis=0)