cv2.error: OpenCV(4.1.0)error: (-215:Assertion failed) !ssize.empty() in function 'resize'错误的解决办法

提示错误如下:

Using TensorFlow backend.
Traceback (most recent call last):
  File "/Users/cody/PycharmProjects/ml/dogs_vs_cats-master/cats_and_dogs.py", line 93, in 
    x_train, y_train = prep_data(train_images)
  File "/Users/cody/PycharmProjects/ml/dogs_vs_cats-master/cats_and_dogs.py", line 84, in prep_data
    image, label = read_image(image_file)
  File "/Users/cody/PycharmProjects/ml/dogs_vs_cats-master/cats_and_dogs.py", line 66, in read_image
    return cv2.resize(img, (ROWS, COLS), interpolation=cv2.INTER_AREA), label
cv2.error: OpenCV(4.1.0) /Users/travis/build/skvark/opencv-python/opencv/modules/imgproc/src/resize.cpp:3718: error: (-215:Assertion failed) !ssize.empty() in function 'resize'

博主给出的建议是:由于文件导入路径错误所致
https://www.cnblogs.com/gengyi/p/10279480.html

# 先导入要用的库
import os
import cv2
import random
import numpy as np
import pandas as pd

import matplotlib.pyplot as plt
from matplotlib import ticker
import seaborn as sns
# %matplotlib inline

#关注这两行,读取文件的路径
TRAIN_DIR = './train'
TEST_DIR = './test'

train_dogs = [(TRAIN_DIR + i, 1) for i in os.listdir(TRAIN_DIR) if 'dog' in i]
train_cats = [(TRAIN_DIR + i, 0) for i in os.listdir(TRAIN_DIR) if 'cat' in i]
test_images = [(TEST_DIR + i, -1) for i in os.listdir(TEST_DIR)]
train_images = train_dogs[:100] + train_cats[:100]
random.shuffle(train_images)
test_images = test_images[:10]
ROWS = 64
COLS = 64


def read_image(tuple_set):
    file_path = tuple_set[0]
    label = tuple_set[1]
    
    #错误报在这两行
    img = cv2.imread(file_path, 1)
    return cv2.resize(img, (ROWS, COLS), interpolation=cv2.INTER_AREA), label
   
CHANNELS = 3
def prep_data(images):
    no_images = len(images)
    data = np.ndarray((no_images, CHANNELS, ROWS, COLS), dtype=np.uint8)
    labels = []
    for i, image_file in enumerate(images):
        image, label = read_image(image_file)
        data[i] = image.T
        labels.append(label)
    return data, labels
x_train, y_train = prep_data(train_images)
x_test, y_shit = prep_data(test_images)
print(x_train.shape)
print(x_test.shape)

代码如上,由于复制粘贴过来的,碉堡下成功第一步,别人说可以用,但是出错啊,所以开启了debug和百度,Goole的探索。
排除步骤如下:
(1)看到代码cv2.imread()函数显示问题
cv2.error: OpenCV(4.1.0)error: (-215:Assertion failed) !ssize.empty() in function 'resize'错误的解决办法_第1张图片
附上调试代码,发现运行后没有问题:

import cv2
img = cv2.imread('boy.jpg',0)
print(img)
cv2.imshow('img',img)
cv2.waitKey(0)

其中,boy.jpg文件与运行文件放在同一文件下,或者指定具体路径。
(2)cv2.resize()显示错误的话,问题可能出在resize或者其上一步的cv2.imread()
结果发现:img返回的是NoneType,说明img对象里根本就没有读入文件。
cv2.error: OpenCV(4.1.0)error: (-215:Assertion failed) !ssize.empty() in function 'resize'错误的解决办法_第2张图片
(3)cv.imread()返回为空,说明输入的参数file_path或者cv.IMREAD_COLOR有问题:
通过以下内容发现,问题就是出在了路径问题

图像读入:cv2.imread()

使用函数cv2.imread() 读入图像。这幅图像应该在此程序的工作路径,或者给函数提供完整路径,第二个参数是要告诉函数应该如何读取这幅图片。

• cv2.IMREAD_COLOR:读入一副彩色图像。图像的透明度会被忽略, 
这是默认参数。 

• cv2.IMREAD_GRAYSCALE:以灰度模式读入图像

import cv2

img = cv2.imread('lena.jpg',0) 

PS:调用opencv,就算图像的路径是错的,OpenCV 也不会提醒你的,但是当你使用命 
令print img时得到的结果是None。
--------------------- 
作者:furuit 
来源:CSDN 
原文:https://blog.csdn.net/fu6543210/article/details/80835280 
版权声明:本文为博主原创文章,转载请附上博文链接!

(4)输出下路径,会发现哪里怪怪的,对!就是输出的路径文件名,
img = cv2.imread(‘lena.jpg’,0) ,
cv2.imread(“图片名称”,‘0或1’) #0表示灰度图片,1表示为彩色图片,也可以直接写参数cv2.IMREAD_COLOR,默认是1,即默认输出为彩色图片。
笔者的图片名称位置输出的是 ‘./traindog.4824.jpg’,文件路径和文件名粘连一块了,怪不得计算机老报错
cv2.error: OpenCV(4.1.0)error: (-215:Assertion failed) !ssize.empty() in function 'resize'错误的解决办法_第3张图片
(5)应该书图中的./train/num.jpg,文件名和路径有/隔开
更改办法:最后加上一个/,完美解决!

TRAIN_DIR = './train/'
TEST_DIR = './test/'

cv2.error: OpenCV(4.1.0)error: (-215:Assertion failed) !ssize.empty() in function 'resize'错误的解决办法_第4张图片
(6)最后看了下猫狗大战进阶https://www.2cto.com/kf/201707/659350.html
这路径最后写的是什么?

train/,最后还有个    /,

所以代码看仔细喽,差一个都不行,我的是原来就没有,导致排错耽误了这么久!

train_dir = '/home/ccf/Study/tensorflow/My-TensorFlow-tutorials-master/02_cats_vs_dogs/data/train/'

debug是程序员的一种素养,也是能力的体现,希望多点细心少犯错,会排错,共勉!
代码部分为kaggle猫狗大战的数据预处理部分!

以上,能力有限,不正之处还请批评指正,

你可能感兴趣的:(深度学习)