使用OpenCV adaptiveThreshold遇blockSize断言错误,设为11仍报错求助
问题原因与解决方案
你的核心问题是**adaptiveThreshold函数的参数顺序完全错误**,混淆了它和普通cv.threshold函数的参数结构,导致实际传入blockSize的不是你设置的11,而是不符合要求的值,触发了断言错误。
具体分析
OpenCV中adaptiveThreshold的Python参数顺序为:
cv.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C)
它不需要全局阈值参数(也就是你代码里的treshold = 115),但你错误地将这个值作为第二个参数传入,导致后续参数全部错位:
- 原本应传给
maxValue的位置,你传了treshold - 原本应传给
adaptiveMethod的位置,你传了maxValue - 以此类推,最终
blockSize的位置被传入了thresholdType的值(比如cv.THRESH_BINARY对应数值0),这显然不满足“大于1的奇数”要求。
修正后的代码
删除多余的treshold变量,调整参数顺序:
maxValue = 255 adaptiveMethod = cv.ADAPTIVE_THRESH_GAUSSIAN_C thresholdType = cv.THRESH_BINARY blockSize = 11 C = 2 # 修正参数顺序 im = cv.adaptiveThreshold(img, maxValue, adaptiveMethod, thresholdType, blockSize, C) plt.imsave(save_path, im, cmap='gray')
额外检查点
如果调整后仍报错,确认:
- 输入图像
img是8位单通道灰度图,adaptiveThreshold不支持彩色或多通道图像 - 确保
blockSize小于输入图像的宽高(极端情况如果图像尺寸小于blockSize也会触发错误,但你的情况大概率是参数顺序问题)
内容的提问来源于stack exchange,提问作者Anunia
相关产品推荐
相关产品推荐

