特征点匹配返回匹配坐标点python

import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
from scipy import stats


def drawMatchesKnn_cv(img1_gray, kp1, img2_gray, kp2, goodMatch):
    h1, w1 = img1_gray.shape[:2]
    h2, w2 = img2_gray.shape[:2]

    vis = np.zeros((max(h1, h2), w1 + w2, 3), np.uint8)
    vis[:h1, :w1] = img1_gray
    vis[:h2, w1:w1 + w2] = img2_gray

    p1 = [kpp.queryIdx for kpp in goodMatch]
    p2 = [kpp.trainIdx for kpp in goodMatch]

    post1 = np.int32([kp1[pp].pt for pp in p1])
    post2 = np.int32([kp2[pp].pt for pp in p2]) + (w1, 0)

    for (x1, y1), (x2, y2) in zip(post1, post2):
        cv.line(vis, (x1, y1), (x2, y2), (0, 0, 255))

    cv.namedWindow("match", cv.WINDOW_NORMAL)
    cv.imshow("match", vis)



img1_gray = cv.imread("D:/dht/left1.png", 0)
img2_gray = cv.imread("D:/dht/right1.png", 0)
img1_gray = cv.resize(img1_gray, (1800, 2400))
img2_gray = cv.resize(img2_gray, (1800, 2400))

# sift = cv.SIFT()
# sift = cv.xfeatures2d.SIFT_create()
sift = cv.SIFT_create()
# sift = cv.SURF()
kp1, des1 = sift.detectAndCompute(img1_gray, None)
kp2, des2 = sift.detectAndCompute(img2_gray, None)
# 设置Flannde参数
FLANN_INDEX_KDTREE = 0
indexParams = dict(algorithm=FLANN_INDEX_KDTREE, trees=5)
searchParams = dict(checks=50)
flann = cv.FlannBasedMatcher(indexParams, searchParams)
matches = flann.knnMatch(des1, des2, k=2)
# bf = cv.BFMatcher(cv.NORM_L2)
# matches = bf.knnMatch(des1,des2,k=2)
# 设置好初始匹配值
destinationx = []
destinationy = []
matchesMask = [[0, 0] for i in range(len(matches))]
for i, (m, n) in enumerate(matches):
    if m.distance < 0.5 * n.distance:  # 舍弃小于0.5的匹配结果
        matchesMask[i] = [1, 0]
        # matchesMask[i] = [1, 0]
        pt1 = kp1[m.queryIdx].pt  # trainIdx    是匹配之后所对应关键点的序号,第一个载入图片的匹配关键点序号
        pt2 = kp2[n.trainIdx].pt  # queryIdx  是匹配之后所对应关键点的序号,第二个载入图片的匹配关键点序号
        destinationx.append(int(pt1[0]-pt2[0]))
        destinationy.append(int(pt1[1]-pt2[1]))
        # print(kpts1)
        print(i, pt1, pt2)


# counts = np.bincount(destinationx)
print(destinationx)
#print(stats.mode(destinationx)[0][0])

#返回众数
# print(np.argmax(counts))

# counts = np.bincount(destinationy)
#返回众数
print(destinationy)
#print(stats.mode(destinationy)[0][0])

drawParams=dict(matchColor=(0,0,255),singlePointColor=(255,0,0),matchesMask=matchesMask,flags=0) #给特征点和匹配的线定义颜色
resultimage=cv.drawMatchesKnn(img1_gray,kp1,img2_gray,kp2,matches,None,**drawParams) #画出匹配的结果
plt.imshow(resultimage)
plt.show()
相关推荐
鸽芷咕1 小时前
【Python报错已解决】ModuleNotFoundError: No module named ‘paddle‘
开发语言·python·机器学习·bug·paddle
子午1 小时前
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
人工智能·python·cnn
风等雨归期1 小时前
【python】【绘制小程序】动态爱心绘制
开发语言·python·小程序
Adolf_19931 小时前
Flask-JWT-Extended登录验证, 不用自定义
后端·python·flask
冯宝宝^1 小时前
基于mongodb+flask(Python)+vue的实验室器材管理系统
vue.js·python·flask
qq_15321452641 小时前
【2023工业异常检测文献】SimpleNet
图像处理·人工智能·深度学习·神经网络·机器学习·计算机视觉·视觉检测
叫我:松哥1 小时前
基于Python flask的医院管理学院,医生能够增加/删除/修改/删除病人的数据信息,有可视化分析
javascript·后端·python·mysql·信息可视化·flask·bootstrap
Eiceblue2 小时前
Python 复制Excel 中的行、列、单元格
开发语言·python·excel
NLP工程化2 小时前
对 Python 中 GIL 的理解
python·gil
极客代码2 小时前
OpenCV Python 深度指南
开发语言·人工智能·python·opencv·计算机视觉