opencv-python-特征匹配笔记

文章详细介绍了使用OpenCV库中的SIFT和ORB算法进行图像特征检测,并利用BFMatcher进行暴力匹配,展示了两种方法在处理不同规模图像时的匹配过程。
摘要由CSDN通过智能技术生成

先贴两张原图

SIFT暴力匹配

img_s = cv2.imread("0.png")
img_d = cv2.imread("1.jpg")

# 根据图片大小,做适当的缩放
# img_s = cv2.resize(img_s, None, fx=0.2, fy=0.2)
img_d = cv2.resize(img_d, None, fx=0.5, fy=0.5)

gray_s = cv2.cvtColor(img_s, cv2.COLOR_BGR2GRAY)
gray_d = cv2.cvtColor(img_d, cv2.COLOR_BGR2GRAY)

# 使用SIFT特征检测
detect = cv2.SIFT.create()
kp_s, des_s = detect.detectAndCompute(gray_s, None)
kp_d, des_d = detect.detectAndCompute(gray_d, None)

# 使用暴力匹配器
# NORM_L1和NORM_L2是专门给SIFT使用的
# True表示交叉查找(即用图1的特征匹配图2的,图2也要用特征匹配图1的,要匹配两轮)
bf = cv2.BFMatcher(cv2.NORM_L1, True)

# 进行匹配
matches = bf.match(des_s, des_d)

# 进行匹配的结果的视觉呈现
img_result = cv2.drawMatches(img_s, kp_s, img_d, kp_d, matches, None)
cv2.imshow("img", img_result)
cv2.waitKey()

ORB暴力匹配

img_s = cv2.imread("0.png")
img_d = cv2.imread("1.jpg")

# img_s = cv2.resize(img_s, None, fx=0.2, fy=0.2)
img_d = cv2.resize(img_d, None, fx=0.5, fy=0.5)

gray_s = cv2.cvtColor(img_s, cv2.COLOR_BGR2GRAY)
gray_d = cv2.cvtColor(img_d, cv2.COLOR_BGR2GRAY)

gray_s = img_s
gray_d = img_d

# 使用ORB特征检测,检测10000个特征点
detect = cv2.ORB.create(nfeatures=10000)
kp_s, des_s = detect.detectAndCompute(gray_s, None)
kp_d, des_d = detect.detectAndCompute(gray_d, None)

# NORM_HAMMING和NORM_HAMMING2是专门给ORB使用的
bf = cv2.BFMatcher(cv2.NORM_HAMMING, True)
matches = bf.match(des_s, des_d)

img_result = cv2.drawMatches(img_s, kp_s, img_d, kp_d, matches, None)
cv2.imshow("img", img_result)
cv2.waitKey()

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值