我正在尝试创建一个用于训练神经网络以验证签名的数据集。我在数据集中调整图像大小时遇到了错误。
这是我目前的代码
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
我做错了什么?有人可以解释错误吗?
提前致谢。
答案 0 :(得分:0)
这通常意味着imread
无法读取图片,提到in the docs
警告即使图像路径错误,也不会抛出任何错误,但
print img
会给您None
因此,resize
可能不是你的论点是错误的,但实际上是无法读取图像(可能是错误的路径?)导致None
作为图像传递。
您的路径涉及对父路径使用../
约定,但这可能无法解析到正确的目录(取决于您从中调用解释器的目录)。
例如,查看here(第二个答案)或here以获取有关如何正确引用给定文件中的父路径的解决方案,并注明here关于为什么天真使用父路径的'..'
可能无法按预期工作(因为它可以基于您调用解释器的路径,不相对于文件,除非您基于{{1 }})。
如果它正在获取正确的目录,那么可能存在损坏的图像,非图像文件或导致__file__
返回imread
的其他文件..您可能想要添加{循环中的{1}} ... None
语句,并打印导致错误的案例的文件路径。