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

Python实现cv2.linemod时遇match函数断言错误:sources.size() == modalities.size()

解决OpenCV LINE-MOD匹配时的sources.size() == modalities.size()断言错误

我用Python实现OpenCV的LINE-MOD目标检测功能,运行以下代码时触发断言错误:

import cv2
import matplotlib.pyplot as plt

template = cv2.imread('./light_t.jpg')
template = cv2.resize(template, (200, 200))
print(template.shape)
lineModDetector = cv2.linemod.getDefaultLINE()
print(len(lineModDetector.getModalities()))

mask = cv2.bitwise_not(template)[:,:,1]

ret, boundingBox = lineModDetector.addTemplate([template], "circle", mask)
print(ret)
print(boundingBox)

target = cv2.imread('../image/materias/light.jpg',)
target = cv2.resize(target, (200, 200))

results = lineModDetector.match(target, threshold=80)

报错信息:

error: (-215:Assertion failed) sources.size() == modalities.size() in function 'cv::linemod::Detector::match'

错误原因

cv2.linemod.getDefaultLINE()创建的LINE-MOD检测器默认包含多个模态(比如代码中len(lineModDetector.getModalities())通常输出为2),每个模态需要对应的输入图像。调用match时直接传入单张图像,无法和模态数量匹配,触发了断言检查。

解决方法

调用match方法时,需要将目标图像包装成列表传入,列表长度要和检测器的模态数量一致。修改后的代码如下:

import cv2
import matplotlib.pyplot as plt

template = cv2.imread('./light_t.jpg')
template = cv2.resize(template, (200, 200))
print(template.shape)
lineModDetector = cv2.linemod.getDefaultLINE()
modalities_count = len(lineModDetector.getModalities())
print(f"模态数量:{modalities_count}")

mask = cv2.bitwise_not(template)[:,:,1]

# 添加模板时传入列表,对应模态数量
ret, boundingBox = lineModDetector.addTemplate([template], "circle", mask)
print(ret)
print(boundingBox)

target = cv2.imread('../image/materias/light.jpg')
target = cv2.resize(target, (200, 200))

# 将目标图像包装成列表传入match,和模态数量匹配
results = lineModDetector.match([target], threshold=80)

# 可选:打印匹配结果详情
for result in results:
    print(f"匹配模板ID:{result[0]},相似度:{result[1]},边界框:{result[2]}")

补充说明:

  • 默认LINE-MOD的模态可共用同一张BGR图像,因此传入单元素列表即可;若自定义了模态,需确保每个模态都有对应输入图像。
  • 确保mask是尺寸与模板一致的单通道二值图像,否则可能影响模板添加或匹配效果。

内容的提问来源于stack exchange,提问作者Breezea Brohn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 17:20:43