opencv(ORB算法)實現相似度檢測

 直接上代碼


# 自定義計算兩個圖片相似度函數
def img_similarity(img1_path, img2_path):
    """
    :param img1_path: 圖片1路徑
    :param img2_path: 圖片2路徑
    :return: 圖片相似度
    """
    try:
        # 讀取圖片
        img1 = cv2.imread(img1_path, cv2.IMREAD_GRAYSCALE)
        img2 = cv2.imread(img2_path, cv2.IMREAD_GRAYSCALE)
        w ,h = img1.shape
        # img1 = img1[0 + 45:h]
        # img2 = img2[0 + 45:h1]
        cv2.imshow("img1", img1)
        cv2.imshow("img2", img2)
        cv2.waitKey(0)


        # 初始化ORB檢測器
        orb = cv2.ORB_create()
        kp1, des1 = orb.detectAndCompute(img1, None)
        kp2, des2 = orb.detectAndCompute(img2, None)

        # 提取並計算特徵點
        bf = cv2.BFMatcher(cv2.NORM_HAMMING)

        # knn篩選結果
        matches = bf.knnMatch(des1, trainDescriptors=des2, k=2)

        # 查看最大匹配點數目
        good = [m for (m, n) in matches if m.distance < 0.75 * n.distance]
        # print(len(good))
        # print(len(matches))
        similary = float(len(good))/len(matches)
        print("(ORB算法)兩張圖片相似度爲:%s" % similary)
        return similary

    except:
        print('無法計算兩張圖片相似度')
        return '0'
if __name__ == '__main__':
    name1='e.jpg'
    name2='f.jpg'
    # similary 值爲0-1之間,1表示相同
    similary = img_similarity(name1, name2)

文檔: https://docs.opencv.org/3.3.1/d1/d89/tutorial_py_orb.html

參考:https://www.cnblogs.com/ronny/p/4083537.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章