import cv2
import numpy as np
import matplotlib.pyplot as plt
def cv_show(name,img):
cv2.imshow(name,img)
cv2.waitKey(0)
cv2.destroyAllWindows()
#Brute_Force蛮力匹配
img1=cv2.imread("build1.jpeg",0)
img2=cv2.imread("build3.jpeg",0)
# cv_show("img1",img1)
# cv_show("img2",img2)
sift=cv2.SIFT_create()
kp1=sift.detect(img1,None)
kp2=sift.detect(img2,None)
img1=cv2.drawKeypoints(img1,kp1,img1)
img2=cv2.drawKeypoints(img2,kp2,img2)
kp1,des1=sift.compute(img1,kp1)
kp2,des2=sift.compute(img2,kp2)
# crossCheck表示两个特征点要互相匹,例如A中的第1 个特征点与B中的第j个特征点最近的,并且B中的第j个特征点到A中的第i个特征点也是
#NORM L2:归一化数组的(欧几里德距离),如果其他特征计算方法需要考虑不同的匹配计算方式
#1对1最佳匹配
# bf=cv2.BFMatcher(crossCheck=True)
#
# matches=bf.match(des1,des2)
# matches=sorted(matches,key=lambda x:x.distance)
#
# img3=cv2.drawMatches(img1,kp1,img2,kp2,matches[:10],None,flags=2)
#
# cv_show("img3",img3)
bf = cv2.BFMatcher()
matches=bf.knnMatch(des1,des2,k=2)
#对关键点进行过滤
good=[]
for m,n in matches:
if m.distance<0.75*n.distance:
good.append([m])
img3=cv2.drawMatchesKnn(img1,kp1,img2,kp2,good,None,flags=2)
cv_show("img3",img3)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)