Python OpenCV中的drawMatches()關鍵匹配繪制方法

作用說明

該方法被用於繪制關鍵點的匹配情況。我們看到的許多匹配結果都是使用這一方法繪制的——一左一右兩張圖像,匹配的關鍵點之間用線條鏈接。

函數原型

cv.drawMatches(	img1, keypoints1, img2, keypoints2, matches1to2, outImg[, matchColor[, singlePointColor[, matchesMask[, flags]]]]) -> outImg
cv.drawMatches(	img1, keypoints1, img2, keypoints2, matches1to2, outImg, matchesThickness[, matchColor[, singlePointColor[, matchesMask[, flags]]]]	) -> outImg
cv.drawMatchesKnn(	img1, keypoints1, img2, keypoints2, matches1to2, outImg[, matchColor[, singlePointColor[, matchesMask[, flags]]]]) -> outImg

參數詳解

  • img1:第一張原始圖像。
  • keypoints1:第一張原始圖像的關鍵點。
  • img2:第二張原始圖像。
  • keypoints2:第二張原始圖像的關鍵點。
  • matches1to2:從第一個圖像到第二個圖像的匹配,這意味著keypoints1[i]在keypoints2[Matches[i]中有一個對應的點。
  • outImg:繪制結果圖像。
  • matchColor:匹配連線與關鍵點點的顏色,當matchColor==Scalar::all(-1) 時,代表取隨機顏色。
  • singlePointColor:沒有匹配項的關鍵點的顏色,當singlePointColor==Scalar::all(-1) 時,代表取隨機顏色。
  • matchesMask:確定繪制哪些匹配項的掩碼。如果掩碼為空,則繪制所有匹配項。
  • flags:繪圖功能的一些標志。具體有:
    • cv.DRAW_MATCHES_FLAGS_DEFAULT
    • cv.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS
    • cv.DRAW_MATCHES_FLAGS_DRAW_OVER_OUTIMG
    • cv.DRAW_MATCHES_FLAGS_NOT_DRAW_SINGLE_POINTS 代碼實例
def bf_match(img_path1, img_path2):
    # 讀取兩張圖像
    img1 = cv2.imread(img_path1, cv2.IMREAD_GRAYSCALE)
    img2 = cv2.imread(img_path2, cv2.IMREAD_GRAYSCALE)

    # 計算兩張圖像的SIFT描述符
    kp1, des1, _ = sift_algorithm(img_path1)
    kp2, des2, _ = sift_algorithm(img_path2)

    # 創建BFMatcher實例
    bf = cv2.BFMatcher()

    # 獲得最佳匹配
    matches = bf.match(des1, des2)
    # 繪制匹配結果
    # matches = sorted(matches, key = lambda x:x.distance)
    match_result = cv2.drawMatches(img1, kp1, img2, kp2, matches, None, flags=cv2.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS)
    # 顯示繪制結果
    plt.imshow(match_result)
    plt.show()
    return match_result

結果

到此這篇關於Python OpenCV中的drawMatches()關鍵匹配繪制方法的文章就介紹到這瞭,更多相關Python OpenCV drawMatches() 內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: