简体   繁体   English

为什么我会收到这个 IndexError?

[英]Why am i getting this IndexError?

I have split my signature folder into train, val and test.我已将我的签名文件夹拆分为 train、val 和 test。 And now I want to see two orig_train signature selected randomly and one forg_val signature.现在我想查看随机选择的两个 orig_train 签名和一个 forg_val 签名。 But I am getting Error.但我收到错误。 Note: I didn't use Forged signature in training (It's the part of my research, it's not something I did by mistake)注意:我没有在训练中使用伪造签名(这是我研究的一部分,不是我做错的)

#Train-Validation-Test Split
#Signatures of 4 people are used for training
#Signatures of 2 people are used for validation
#Signatures of 2 people are used for testing

orig_train, orig_val, orig_test = orig_groups[:4], orig_groups[4:6], orig_groups[6:]
forg_val, forg_test = forg_groups[:4], forg_groups[4:]```
def visualize_sample_signature():
    '''Function to randomly select a signature from train set and
    print two genuine copies and one forged copy'''
    fig, (ax1, ax2, ax3) = plt.subplots(1, 3, figsize = (10, 10))
    k = np.random.randint(len(orig_train))
    orig_img_names = random.sample(orig_train[k], 1)
    forg_img_name = random.sample(forg_val[k], 0)
    orig_img1 = cv2.imread(orig_img_names[0], 0)
    orig_img2 = cv2.imread(orig_img_names[1], 0)
    forg_img = plt.imread(forg_img_name[0], 0)
    orig_img1 = cv2.resize(orig_img1, (img_w, img_h))
    orig_img2 = cv2.resize(orig_img2, (img_w, img_h))
    forg_img = cv2.resize(forg_img, (img_w, img_h))

    ax1.imshow(orig_img1, cmap = 'gray')
    ax2.imshow(orig_img2, cmap = 'gray')
    ax3.imshow(forg_img, cmap = 'gray')

    ax1.set_title('Genuine Copy')
    ax1.axis('off')
    ax2.set_title('Genuine Copy')
    ax2.axis('off')
    ax3.set_title('Forged Copy')
    ax3.axis('off')

visualize_sample_signature()
IndexError                                Traceback (most recent call last)
<ipython-input-113-8ca6484a3a89> in <module>
----> 1 visualize_sample_signature()

<ipython-input-112-2588ee191bd7> in visualize_sample_signature()
      7     forg_img_name = random.sample(forg_val[k], 0)
      8     orig_img1 = cv2.imread(orig_img_names[0], 0)
----> 9     orig_img2 = cv2.imread(orig_img_names[1], 0)
     10     forg_img = plt.imread(forg_img_name[0], 0)
     11     orig_img1 = cv2.resize(orig_img1, (img_w, img_h))

IndexError: list index out of range

When calling random.sample()调用 random.sample() 时

orig_img_names = random.sample(orig_train[k], 1)

You are only drawing one sample.您只绘制一个样本。

Syntax: random.sample(sequence, k)语法:random.sample(sequence, k)

sequence: is what you are choosing from序列:是您从中选择的

k: is the number of samples you are choosing k:是您选择的样本数

In this case you are choosing 1 sample and later in your code you are asking for the next element in orig_img_names.在这种情况下,您选择了 1 个样本,稍后在代码中您将要求 orig_img_names 中的下一个元素。

orig_img2 = cv2.imread(orig_img_names[1], 0)

There is not an element at position 1; position 1 处没有元素; only at position 0. Therefore you get a "list index out of range."仅在 position 0 处。因此您会得到“列表索引超出范围”。

In other words, you only have one image to choose from in orig_img_names.换句话说,您在 orig_img_names 中只有一张图像可供选择。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM