错误:( - 1515)ssize.width> 0&& ssize.height> 0在函数调整大小

时间:2017-11-08 06:14:24

标签: python opencv machine-learning image-resizing

我正在构建图像处理分类器,除了这一行以外的整个代码 -

input_img_resize=cv2.resize(input_img,(128,128))

此行给我一个错误

('error: /io/opencv/modules/imgproc/src/imgwarp.cpp:3483: error: (-215) ssize.width > 0 && ssize.height > 0 in function resize')

我的代码 -

PATH = os.getcwd()
# Define data path
data_path = PATH + '/data'
data_dir_list = os.listdir(data_path)

img_rows=128
img_cols=128
num_channel=3
num_epoch=30

num_classes = 67

img_data_list=[]

for dataset in data_dir_list:
    img_list=os.listdir(data_path+'/'+ dataset)
    print ('Loaded the images of dataset-'+'{}\n'.format(dataset))
    for img in img_list:
        input_img=cv2.imread(data_path + '/'+ dataset + '/'+ img )

        input_img_resize=cv2.resize(input_img,(128,128))
        img_data_list.append(input_img_resize)

6 个答案:

答案 0 :(得分:12)

好吧,显然这一行 input_img=cv2.imread(data_path + '/'+ dataset + '/'+ img ) 返回一个空数组。

在阅读之前,您应该先检查图像是否存在。请停止使用字符串组合来连接文件路径,使用python os.path.join是更好的选择。

image_path = os.path.join(data_path, dataset, img)
if os.path.exist():
    # Do stuff

答案 1 :(得分:2)

这是因为一张图片。

为了找到图像,我添加了一行代码,用于在图像进入cv2.resize之前打印图像的名称,另一行在调整大小后显示名称。它会自动停在有故障的图像上。

答案 2 :(得分:1)

确保input_img的分辨率不为零,即(0,0,number_of_channels),这意味着它找不到任何图像。 因此,在对其执行操作之前,请添加以下检查:

if input_img.shape[0]!=0 and input_img.shape[1]!=0:
    #operations on input_img

答案 3 :(得分:1)

如果要处理多张图像(例如1000张图像),则可能很难确定哪个图像给您带来了问题。也可能是,还有其他一些已损坏。在这种情况下,下面的代码可能会很有用。

for file in filenames:
    try:
        image = cv2.resize(cv2.imread(file), (size, size))
    except:
        print(file)

其中filenames是包含图像名称的列表。

答案 4 :(得分:0)

您遇到此问题,因为扫描时可能无法正确读取图像。所以要确保加载tat图像。

if input_img is not None:
            img = cv2.resize(input_img, (IMG_SIZE,IMG_SIZE))
            training_data.append([np.array(img), np.array(label)])
        else:
            print("image not loaded")


这会跳过当前图像,然后继续扫描。这分为两段,结果如下:enter image description here
希望这有帮助:)

答案 5 :(得分:0)

这是因为未正确识别图像区域。这是您可以尝试的一种方法:

gray = cv2.cvtColor(input_img, cv2.COLOR_BGR2GRAY)
r = cv2.selectROI(gray)
cv2.selectROI()

如果未检测到图像,则可以手动选择每个图像中的图像区域。