错误: (-215) ssize.width > 0 && ssize.height > 0 在 resize 函数中

10
我正在开发一个图像处理分类器。以下代码行出现错误: 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)

请在执行 input_img=cv2.imread(data_path + '/'+ dataset + '/'+ img ) 之后确认图像是否已经成功加载,可以使用这段代码:if input_img is not None: - ZdaR
1
是的,你说得对。现在我该怎么办? - Dexter
2
你应该确保路径是正确的,尝试打印路径并在终端中使用 ls -la 检查路径是否存在,并确保你正在尝试读取 OpenCV 支持的图像扩展名,如 pngjpgjpegbmp 等。此外,使用 os.path.join(data_path, dataset, img) 而不是 cv2.imread(data_path + '/'+ dataset + '/'+ img) - ZdaR
7个回答

15

很明显,这行代码 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

3

问题出在一张图片上。

为了找到这张图片,我添加了一行代码,在进入cv2.resize之前打印出图片的名称,另外一行代码则是将图片resize之后再打印名称。程序会自动在出错的图片处停止执行。


1

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

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

1

如果您正在处理多个图像(例如1000张图像),可能很难确定哪个图像出现了问题。也可能有其他几个图像是损坏的。在这种情况下,下面的代码可能会有所帮助。

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

其中filenames是一个包含图片名称的列表。


0
这是因为图像区域没有被正确识别。以下是您可以尝试的一种方法:
gray = cv2.cvtColor(input_img, cv2.COLOR_BGR2GRAY)
r = cv2.selectROI(gray)
cv2.selectROI()

如果图像没有被检测到,这将允许您手动选择每张图片中的区域。


0
针对这个错误,您可以简单地使用这段代码。它肯定能运行并解决您的问题。我之前也遇到了这个错误,并用这段代码修复了它。
img = cv2.imread(path + '\\' + img_name)

0
您遇到此问题的原因可能是在扫描时图像未被正确读取。因此,请确保图像已加载。
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")


这将跳过当前的图像然后继续扫描。结果分为两个部分,如下所示:在此输入图片描述
希望对你有所帮助 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接