【问题标题】:Error while resizing image using open cv使用 open cv 调整图像大小时出错
【发布时间】:2018-08-22 04:07:44
【问题描述】:

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

这是我目前的代码

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

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

提前致谢。

【问题讨论】:

    标签: python opencv conv-neural-network


    【解决方案1】:

    这通常意味着imread未能读取图像,提到in the docs

    警告即使图片路径错误,也不会报错,但是print img会给你None

    因此,可能不是您对resize 的参数有误,但实际上是读取图像失败(可能是路径错误?)导致None 作为图像传递。

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

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

    如果它正在获取正确的目录,则可能有损坏的图像、非图像文件或其他文件导致imread 返回None ..您可能需要添加try .. . except 循环中的语句并打印出导致错误的情况的文件路径。

    【讨论】:

    • 你是对的。一些文件没有正确标记。非常感谢
    猜你喜欢
    • 1970-01-01
    • 2014-06-26
    • 1970-01-01
    • 2017-05-31
    • 2018-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多