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

ImageDataGenerator中调用adaptiveThreshold报CV_8UC1断言失败错误

问题原因

adaptiveThreshold要求输入为单通道8位无符号整型图像(即CV_8UC1格式),你单独调用函数时用cv2.imread(path, 0)读取的灰度图维度为(高度, 宽度),符合格式要求;但ImageDataGenerator加载灰度图时会自动保留通道维度,传入预处理函数的图像维度为(高度, 宽度, 1),无法被OpenCV函数识别,因此触发断言报错。

解决方法

修改自定义预处理函数,在调用OpenCV算子前去掉多余的通道维度,处理完成后再恢复通道维度适配模型输入要求即可:

import numpy as np # 如未导入numpy需先添加该行

def edge_detection(frame):
    minValue = 70
    # 移除最后一维的通道占位,适配OpenCV函数输入要求
    frame = frame.squeeze(axis=-1)
    blur = cv2.GaussianBlur(frame,(5,5),2)
    th3 = cv2.adaptiveThreshold(blur,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY_INV,11,2)
    ret, res = cv2.threshold(th3, minValue, 255, cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)
    # 恢复通道维度,匹配模型输入的(64,64,1)格式要求
    return res[..., np.newaxis]

修改后重新运行训练代码即可正常执行。


内容的提问来源于stack exchange,提问作者mahmoud magdy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 17:27:03