将图像数组[n,宽度,高度]重新整形为[n,高度,宽度,通道]

时间:2017-05-19 10:19:19

标签: python numpy reshape

我的图像由单个数字组成,宽度= 32,高度= 60。我试图连接它们以获得最多5位数的图像。

我正在制作像下面这样的单位数字图像;

def gen(n=10, max_digs=1, width=32):
    capgen = ImageCaptcha(width=width, height=60)
    data = []
    target = []
    for i in range(n):
        x = np.random.randint(0, 10 ** max_digs)
        img = misc.imread(capgen.generate(str(x)))
        img = np.mean(img, axis=2)[:, :width]
        data.append(img.flatten())
        target.append(x)
    return np.array(data), np.array(target)

然后我尝试用以下方法连接它们

def generate_dataset(X, y):
    X_len = X.shape[0]
    X_gen = np.zeros((X_len, height, width * n_len, 1), dtype=np.uint8)
    y_gen = [np.zeros((X_len, n_class), dtype=np.uint8) for i in range(n_len)]
    # generate random numbers of digits
    n_digit = random.randint(1, 6)
    for j in range(X_len):
        n_digit = random.randint(1, 5)
        for i in range(n_digit):
            index = random.randint(0, X_len - 1)
            image = X[index]
            label = y[index]
            X_gen[j][:, i*height:width + i * width, 0] = image
            y_gen[i][j][label] = 1
        for i in range(n_digit, n_len):
            y_gen[i][j][10] = 1
    return X_gen, y_gen

然而,它给了我错误“无法将形状(32,60)的输入数组广播成形状(60,0)”

1 个答案:

答案 0 :(得分:0)

好吧,看起来左右的形状不匹配。

X_gen[j][:, i*height:width + i * width, 0] 

具有(60,32)的形状,并且图像具有形状(32,60)

也许可以尝试以下方法来查看它是否有效?

X_gen[j][:, i*height:width + i * width, 0] = image.T

<强>更新

最后,这一改变解决了这个问题:

X_gen[j][:, i*width: (i+1)*width, 0] = image.T