筛选备选方案OpenCV

2024-09-28 16:59:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我用旧的SIFT编写了一个算法,它非常适合我的需要。但是,我意识到SIFT的新版本不再支持OpenCV。有什么建议可以用来替代它,这样我就可以保留我现有的代码了?我试过ORB,但它的工作方式似乎不同,似乎不能让它以同样的方式工作。在

筛选/筛选材料

def siftMatcher(image, logoToSearch):
    MIN_MATCH_COUNT = 45
    img1 = logoToSearch
    img2 = image

    # Initiate SIFT detector
    sift = cv2.xfeatures2d.SIFT_create()
    kp1, des1 = sift.detectAndCompute(img1, None)
    kp2, des2 = sift.detectAndCompute(img2, None)
    # FLANN parameters
    FLANN_INDEX_KDTREE = 1
    index_params = dict(algorithm=FLANN_INDEX_KDTREE, trees=5)
    search_params = dict(checks=30)
    flann = cv2.FlannBasedMatcher(index_params, search_params)
    matches = flann.knnMatch(des1, des2, k=2)
    # store all the good matches as per Lowe's ratio test.

    mCords = []
    nCords = []
    hasSeen = []

    for m, n in matches:
        if m.distance < 0.65 * n.distance:
            mC = kp2[m.trainIdx].pt
            nC = kp2[n.trainIdx].pt
            if ([mC,nC] in hasSeen or [nC,mC] in hasSeen):
                continue
            mCords.append(mC)
            nCords.append(nC)
            hasSeen.append([mC,nC])
            hasSeen.append([nC,mC])
    symMatches = numberOfSymetricMatches(mCords,nCords)
    return symMatches

创建分数

^{pr2}$

编辑1

Explanation on why I can't use older version of OpenCV

编辑2:ORB实现,结果不佳

^{3}$

Tags: inparamsmcopencvncmatchessiftflann