OpenCV MatchTemplate调整匹配图像大小时报(-215)断言错误如何解决
错误原因
你混淆了OpenCV的两类参数:
cv.IMREAD_*系列常量是cv.imread()方法专属的读取配置参数,不能传入cv.cvtColor()作为颜色空间转换规则- 你在对截图转灰度时传入了非法参数
cv.IMREAD_GRAYSCALE,导致输出的haystack图像格式异常,不满足模板匹配的格式要求
修改方案
- 截图转灰度的代码行替换为正确的颜色转换常量,由于
ImageGrab.grab()返回的PIL图像默认是RGB通道顺序,转灰度应使用cv.COLOR_RGB2GRAY:
# 错误写法 # haystack = cv.cvtColor(haystack_img_np, cv.IMREAD_GRAYSCALE) # 正确写法 haystack = cv.cvtColor(haystack_img_np, cv.COLOR_RGB2GRAY)
- 模板读取的修改是正确的,无需调整:
ship_img = cv.imread(img, cv.IMREAD_REDUCED_GRAYSCALE_2)
可选调试手段
你可以在匹配前加两行代码确认格式一致性,避免后续类似问题:
print(f"待匹配图参数:维度{haystack.shape}, 类型{haystack.dtype}") print(f"模板图参数:维度{needle_img.shape}, 类型{needle_img.dtype}")
正常情况下两者的dtype都应为uint8,且都为单通道二维数组。
内容的提问来源于stack exchange,提问作者user9686961
相关产品推荐
相关产品推荐

