使用open cv调整图像大小时出错

时间:2018-03-13 19:03:32

标签: python opencv conv-neural-network

我正在尝试创建一个用于训练神经网络以验证签名的数据集。我在数据集中调整图像大小时遇到​​了错误。

这是我目前的代码

import cv2
import numpy as np
import os
from random import shuffle
from tqdm import tqdm
from PIL import Image

TRAIN_DIR = '../DATASET/TRAIN/'
TEST_DIR = '../DATASET/TEST/'
IMG_BREDTH = 250
IMG_HEIGHT = 100
LR = 1e-3

MODEL_NAME = 'signature-{}-{}.model'.format(LR, '2conv-basic')

def label_img(img):
    word_label = img.split('.')[-2]
    if (word_label == '1') or (word_label == '2'): return [1,0]
    elif word_label == 'F': return [0,1]

def create_training_set():
    training_data = []

    for img in  tqdm(os.listdir(TRAIN_DIR)):
        label = label_img(img)
        path = os.path.join(TRAIN_DIR, img)  
        img = cv2.resize(cv2.imread(path, cv2.IMREAD_GRAYSCALE), (IMG_BREDTH, IMG_HEIGHT))
        training_data.append([np.array(img), np.array(label)])

    shuffle(training_data)
    np.save('training_data.npy', training_data)

    return training_data

我收到此错误

 14%|█▍        | 105/730 [00:00<00:00, 1040.64it/s]

---------------------------------------------------------------------------
error                                     Traceback (most recent call last)
<ipython-input-87-57e881a5e615> in <module>()
----> 1 create_training_set()

<ipython-input-86-ed607a429014> in create_training_set()
     20         path = os.path.join(TRAIN_DIR, img)
     21 #         img = rotateImage(img, 90)
---> 22         img = cv2.resize(cv2.imread(path, cv2.IMREAD_GRAYSCALE), (IMG_BREDTH, IMG_HEIGHT))
     23         training_data.append([unq_num, np.array(img), np.array(label)])
     24         unq_num += 3

error: /Users/travis/build/skvark/opencv-python/opencv/modules/imgproc/src/resize.cpp:4044: error: (-215) ssize.width > 0 && ssize.height > 0 in function resize

我做错了什么?有人可以解释错误吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

这通常意味着imread无法读取图片,提到in the docs

  

警告即使图像路径错误,也不会抛出任何错误,但print img会给您None

因此,resize可能不是你的论点是错误的,但实际上是无法读取图像(可能是错误的路径?)导致None作为图像传递。

您的路径涉及对父路径使用../约定,但这可能无法解析到正确的目录(取决于您从中调用解释器的目录)。

例如,查看here(第二个答案)或here以获取有关如何正确引用给定文件中的父路径的解决方案,并注明here关于为什么天真使用父路径的'..'可能无法按预期工作(因为它可以基于您调用解释器的路径,相对于文件,除非您基于{{1 }})。

如果它正在获取正确的目录,那么可能存在损坏的图像,非图像文件或导致__file__返回imread的其他文件..您可能想要添加{循环中的{1}} ... None语句,并打印导致错误的案例的文件路径。