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 <module>
    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()函数显示问题
在这里插入图片描述
附上调试代码,发现运行后没有问题:

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对象里根本就没有读入文件。
在这里插入图片描述
(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’,文件路径和文件名粘连一块了,怪不得计算机老报错
在这里插入图片描述
(5)应该书图中的./train/num.jpg,文件名和路径有/隔开
更改办法:最后加上一个/,完美解决!

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

在这里插入图片描述
(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猫狗大战的数据预处理部分!

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

  • 27
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: 错误信息:cv2.error: opencv(4.5.4) d:\a\opencv-python\opencv-python\opencv\modules\imgproc\src\resize.cpp:4051: error: (-215:assertion failed) !ssize.empty() in function 'cv::resize' 翻译:opencv(4.5.4)在resize.cpp的4051行出现了错误错误信息为(-215:assertion failed),意思是断言失败,即图像大小不为空,出现了问题。 ### 回答2: 这个错误OpenCV中的一个常见错误。它表示尝试调用resize()函数时源图像大小为零。这通常是由于文件读取失败或使用了一个空的NumPy数组作为源图像而导致的。 要解决这个错误,首先需要确保读取的图像文件存在,文件路径正确,并且文件不为空。如果文件读取失败,则需要检查文件路径和文件类型是否正确。 如果使用NumPy数组作为源图像,需要确保数组不为空,并且至少有一个元素。检查输入数组形状并确保其值正确。 在代码中更改源图像大小时,可以在代码中增加一个if语句,检查源图像是否为空,像这样: if img.size != 0: resized_image = cv2.resize(img, (new_width, new_height)) 使用这种方式可以确保源图像不为空并且具有正确的形状和大小。同时保证程序更健壮和可靠。 总之,当使用OpenCV时,特别是在进行图像处理时,遇到错误很常见。重要的是要理解错误的含义,并采取必要的措施来排除错误。对于这个错误,需要确保源图像不为空,文件路径正确,并且使用正确的文件类型。 ### 回答3: OpenCV中的cv::resize函数用于图像的缩放和大小调整。当出现“cv2.error: opencv(4.5.4) d:\a\opencv-python\opencv-python\opencv\modules\imgproc\src\resize.cpp:4051: error: (-215:assertion failed) !ssize.empty() in function 'cv::resize'”等错误提示时,通常是由于输入的图像大小不符合resize函数的要求所致。 在OpenCV中,cv::resize函数的输入参数是要缩放或调整大小的图像,输出参数是缩放或调整大小后的图像,而函数的其他参数用于控制缩放或调整大小的方式。其中,输入图像的大小不能为空,否则会引发上述错误。 解决该错误的方法是先检查输入的图像大小是否为空,如果为空,则需要重新加载图像。此外,还可以手动设置输入图像的大小,以确保其与resize函数的要求相符。 另外,对于其他与resize函数相关的错误,还可以根据错误提示信息进行调试,例如检查是否使用了不受支持的参数,或者是否未正确设置输出图像的大小等。 总之,当出现“cv2.error: opencv(4.5.4) d:\a\opencv-python\opencv-python\opencv\modules\imgproc\src\resize.cpp:4051: error: (-215:assertion failed) !ssize.empty() in function 'cv::resize'”等错误提示时,应该先检查输入图像的大小是否为空,并进行相应的处理,以确保程序能够正常运行。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值