Python Opencv实践 - ORB特征匹配

参考资料:

ORB特征笔记_亦枫Leonlew的博客-CSDN博客

python opencv3 基于ORB的特征检测和 BF暴力匹配 knn匹配 flann匹配 - 知乎

Python OpenCV中的drawMatches()关键点匹配绘制方法详解_cv2.drawmatches_乔卿的博客-CSDN博客

复制代码
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt

img_car = cv.imread("../SampleImages/car.png", cv.IMREAD_COLOR)
img_carbody = cv.imread("../SampleImages/carbody.png", cv.IMREAD_COLOR)

#ORB特征提取
#参考资料:https://zhuanlan.zhihu.com/p/141360894
#1. 创建ORB对象
#   orb = cv.ORB_create()
orb = cv.ORB_create()

#2. 检测关键点,生成描述符
#   kp,des = orb.detectAndCompute(img, None)
#   img:原图
#   kp: 检测出的关键点
#   des:关键点描述符
keypoints_car,des_car = orb.detectAndCompute(img_car, None)
keypoints_carbody,des_carbody = orb.detectAndCompute(img_carbody, None)

#使用暴力匹配器进行特征匹配
#1. 创建暴力匹配器对象
bf = cv.BFMatcher(cv.NORM_HAMMING, crossCheck=True)
#2. 使用匹配器的match方法进行特征匹配
matches = bf.match(des_car, des_carbody)
#3. 对结果进行排序,排序使用的参数是距离
matches = sorted(matches, key=lambda x: x.distance)

#绘制匹配项
#cv.drawMatches(	img1, keypoints1, img2, keypoints2, matches1to2, outImg, matchesThickness[, 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
#参考资料:https://blog.csdn.net/qq_41112170/article/details/124651286
img_match_result = cv.drawMatches(img_car, keypoints_car, img_carbody, keypoints_carbody, matches, None, flags=2)

plt.figure(figsize=(15,15))
plt.imshow(img_match_result[:,:,::-1])
相关推荐
Surmon2 小时前
彻底搞懂大模型 Temperature、Top-p、Top-k 的区别!
前端·人工智能
见行AGV机器人5 小时前
无人机脉动线中的AGV小车
人工智能·无人机·agv·非标定制agv
廋到被风吹走5 小时前
【AI】从 OpenAI Codex 到 GitHub Copilot:AI 编程助手的技术演进脉络
人工智能·github·copilot
newsxun5 小时前
DHA之后,大脑营养进入GPC时代?
人工智能
sg_knight5 小时前
设计模式实战:模板方法模式(Template Method)
python·设计模式·模板方法模式
程序员Better5 小时前
2026年AI大模型选择指南:8大主流模型深度对比,小白秒懂如何选!
人工智能
FreakStudio5 小时前
ESP32居然能当 DNS 服务器用?内含NCSI欺骗和DNS劫持实现
python·单片机·嵌入式·面向对象·并行计算·电子diy
ai_xiaogui5 小时前
AIStarter新版后端原型图详解:架构全面升级+共享环境一键部署,本地AI模型插件工作流管理新时代来临(2026开发者必看)
人工智能·架构·推动开源ai落地·原型图细节·aistarter新版·aistarter新版原型图·架构全面升级+共享环境一键部署
2501_926978335 小时前
“LLM的智能本质--AGI的可能路径--人类的意识本质”三者的统一基底(5.0理论解读)
人工智能·经验分享·笔记·深度学习·机器学习·ai写作·agi
拾光向日葵5 小时前
2026贵州高职专科报考全问答合集:专业、就业与实力大盘点
大数据·人工智能·物联网