【问题标题】:OpenCV BFMatcher match() always return errorOpenCV BFMatcher match() 总是返回错误
【发布时间】:2014-06-14 22:24:37
【问题描述】:

我正在训练一个有 4 个描述符的 BFMatcher:

bf = cv2.BFMatcher()

bf.clear()
bf.add(des1)
bf.add(des2)
bf.add(des3)
bf.add(des4)
bf.train()

bf.match(des1)

代码bf.match(des1) 抛出这个错误:

error: ..\..\..\..\opencv\modules\core\src\stat.cpp:2473: error: (-215) type == src2.type() && src1.cols == src2.cols && (type == CV_32F || type == CV_8U) in function cv::batchDistance

这可能是什么原因?描述符是 ORB 描述符。

【问题讨论】:

    标签: python opencv


    【解决方案1】:

    你是对的,你可以在列表中添加描述符,但你只能匹配单个描述符,因此,遍历整个 des1 数组并匹配每个单个描述符并将匹配项保存在列表中,如果你不这样做,则保存在集合中'不希望他们重复!

    matches = set()
    for desc in desc1:
        matches_img = bf.knnMatch(desc,k=2)
        for match in matches_img:
            matches.add(match)
    

    【讨论】:

    • 请通过添加您提到的代码来改进您的答案。
    • 干得好!感谢您改进您的答案。 +1
    【解决方案2】:

    你应该使用:

        bf  = cv2.BFMatcher(cv2.NORM_HAMMING)
    

    使用 ORB 时。错误表明ORB描述符使用的类型不支持匹配器的默认L2距离。

    【讨论】:

    • 我按照你的说法进行了更改,问题仍然存在。显示相同的错误消息
    • 好吧,没有任何培训,匹配只在 bf.match(des1, des2) 这样的两个 ORB 上工作。喜欢这里:opencv-python-tutroals.readthedocs.org/en/latest/py_tutorials/…
    • 好的,现在尝试训练,但只能使用这两个 des1 和 des2。它可能是其他 desc 中的一个大小不同,因为错误是 has "src1.cols == src2.cols"
    • 所有描述符(des1、des2、des3、des4)的形状相同,即500行32列。
    • 看来我还没有理解match方法的正确输入是什么,如果我运行ma = bf.match(des1[0])就可以了。
    猜你喜欢
    • 1970-01-01
    • 2017-02-17
    • 2012-11-19
    • 2019-06-02
    • 1970-01-01
    • 2012-02-26
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多