You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python香蕉成熟度检测代码运行时cv2.resize报错求助

香蕉成熟度检测代码报错修复方案

错误根因

cv2.error: 断言失败:!ssize.empty()报错的核心原因是cv2.resize()接收的输入图像为空值,该空值来源于cv2.imread()读取文件失败后返回的None,具体触发点有3个:

  • 遍历目录时未过滤非图片文件,系统生成的缓存文件、子目录会被os.listdir()纳入遍历范围,cv2无法解析这类非图片资源,返回None
  • 路径手动拼接错误,代码中直接用字符串相加拼接文件路径,缺少系统标准路径分隔符,导致文件找不到读取失败
  • 存在无效冗余代码,averagecolor函数中return后的代码不会执行,循环外的无意义imread调用还可能引发变量作用域冲突

修复步骤

1. 增加图片读取校验逻辑

每次调用cv2.imread()后判断返回值是否为None,直接跳过读取失败的文件

2. 统一用os.path.join()拼接路径

避免不同操作系统的路径分隔符差异导致的路径错误

3. 过滤非图片后缀文件

仅处理jpg、png等常见图片格式的文件

修复后完整代码

import cv2
import os
import numpy as np

def averagecolor(image):
    return np.mean(image, axis=(0, 1))

path = r"C:/Users/Rafael/Desktop/Banana_Ripeness-master/Data/"
trainX = []
trainY = []
# 支持的图片后缀
ALLOWED_IMG_SUFFIX = ('.jpg', '.jpeg', '.png', '.bmp')

for label in ('Unriped','Riped', 'No Banana Found'):
    print ("Loading training images for the label: "+label)
    label_path = os.path.join(path, label)
    # 遍历子文件夹
    for filename in os.listdir(label_path):
        # 过滤非图片文件
        if not filename.lower().endswith(ALLOWED_IMG_SUFFIX):
            continue
        img_path = os.path.join(label_path, filename)
        img = cv2.imread(img_path)
        # 校验读取结果
        if img is None:
            print(f"跳过无法读取的文件:{img_path}")
            continue
        img_re = cv2.resize(img, (640,480))
        img_features = averagecolor(img_re)
        trainX.append(img_features)
        trainY.append(label)

Test = os.path.join(path, "Test")
for filename in os.listdir(Test):
    if not filename.lower().endswith(ALLOWED_IMG_SUFFIX):
        continue
    test_img_path = os.path.join(Test, filename)
    test_img = cv2.imread(test_img_path)
    if test_img is None:
        print(f"跳过无法读取的测试文件:{test_img_path}")
        continue
    test_img_feat = averagecolor(test_img)
    calculated_distances = []
    for i in trainX:
        calculated_distances.append(np.linalg.norm(test_img_feat-i))
    prediction = trainY[np.argmin(calculated_distances)]
    print(f"{filename}:{prediction}")

额外优化建议

  • 如果训练集的No Banana Found类别中存放的是无香蕉的背景图,建议调整分类逻辑,先做香蕉目标检测再判断成熟度,准确率会更高
  • 可以增加距离阈值判断,当最小距离超过阈值时统一返回No Banana Found,避免误判

内容的提问来源于stack exchange,提问作者Rafael Salvino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 18:36:08