如何使用ORB算法实现不同图像间的相同物体的特征匹配?(附源码)
OpenCV杂谈_12一. 需要做的前期准备环境配置:Python版本:3.7功能包:opencv-python(3.4.2.16)常识须知:ORB是什么?为什么要用ORB?ORB 是 Oriented Fast and Rotated Brief 的简称,可以用来对图像中的关键点快速创建特征向量,这些特征向量可以用来识别图像中的对象。ORB 的特点是速度非常快,而且在一定程度上不受噪点和图像变换
·
OpenCV杂谈_12
一. 需要做的前期准备
- 环境配置:
Python版本:3.7
功能包:opencv-python(3.4.2.16) - 常识须知:
ORB是什么?为什么要用ORB?
ORB 是 Oriented Fast and Rotated Brief 的简称,可以用来对图像中的关键点快速创建特征向量,这些特征向量可以用来识别图像中的对象。ORB 的特点是速度非常快,而且在一定程度上不受噪点和图像变换的影响,例如旋转和缩放变换等。而且免费。 - 文件夹配置
- 一个用的顺手的IDE(由于是Python项目,本人推荐Pycharm)
二. 源码如下:
import cv2
# 读取图片
img1 = cv2.imread("ImageQuery/JUMANJI.png", 0) # 结尾加0直接将图片转化为灰色
img2 = cv2.imread("ImageTrain/2.png", 0)
# img2 = cv2.imread("ImageTrain/3.png", 0) # 选择内容不同的图片时会发现可以匹配的点特别的少
# 使用ORB检测出特征点
orb = cv2.ORB_create(nfeatures=1000) # nfeatures 代表着找到多少个特征点
kp1, des1 = orb.detectAndCompute(img1, None) # kp : key points des : descriptor (key points:特征点在图像中的位置,有些特征点还具有朝向、大小等信息。 描述子:通常是一个向量,描述了该关键点周围像素的信息)
kp2, des2 = orb.detectAndCompute(img2, None)
# 绘制出检测得到的特征点
imgKp1 = cv2.drawKeypoints(img1, kp1, None)
imgKp2 = cv2.drawKeypoints(img2, kp2, None)
# match两张图片中的特征点
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])
print(len(good)) # 打印出匹配到了多少个特征点
# 在一张新的图片上展示match的结果
img3 = cv2.drawMatchesKnn(img1, kp1, img2, kp2, good, None, flags=2)
# 展示结果
# cv2.imshow("kp1", imgKp1)
# cv2.imshow("kp2", imgKp2)
# cv2.imshow("img1", img1)
# cv2.imshow("img2", img2)
cv2.imshow("match", img3)
cv2.waitKey(0)
三. 结果展示
四. 感悟与分享
- Matching一直以来是计算机视觉的一大重要研究方向,其用途可以在高精度的基础上得到大大地延伸。
比如:1. 分类检测任务:当你已经知道上图左半部分内容的分类属性是JUMANJI游戏光盘,那你完全可以根据其特征点的匹配情况,来判断另一个物体的分类属性是不是JUMANJI游戏光盘。这相比于使用基于深度学习的物体识别方法来说,具有更少的计算量、训练量,但也难免会降低一些精度和适用性。因此可以用在一些不需要大量样本的、较为单调的分类任务。2. 追踪任务:一般的追踪算法(比如Camshift算法)是通过提取目标的颜色特征能够有效地对视频中的运动目标进行持续跟踪,并且可以自动调节搜索窗大小,从而提高运动目标跟踪的准确性。但是,当背景与运动目标颜色相近或者背景复杂多变的情况下,很容易发生跟踪失败的情况,而此时就可以利用ORB算法找到在上一帧中跟踪失败的目标,然后再回到Camshift算法达到对目标连续跟踪的目的。 - 相关论文推荐:
ORB算法论文原文:ORB: An efficient alternative to SIFT or SURF
基于ORB算法的追踪实现:基于ORB特征点匹配的改进Camshift运动目标跟踪算法
如有问题,敬请指正。欢迎转载,但请注明出处。

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。
更多推荐
所有评论(0)