OpenCV基于ORB算法实现角点检测

咖啡半糖
咖啡半糖
发布时间:2026-10-16 | 4人浏览过
原创

本文详细介绍如何利用OpenCV中的ORB算法进行图像角点检测。内容涵盖ORB算法原理、cv.ORB_create实例化参数设置、detectAndCompute函数用法及返回值解析,以及cv.drawKeypoints绘图函数的颜色与标志位配置,附带完整Python代码示例供参考。

本文分享基于OpenCV使用ORB算法进行角点检测的具体实现代码,供读者参考学习。

ORB算法融合了FAST关键点检测与BRIEF特征描述子的优势,能够快速提取图像中的关键点并生成特征向量,进而用于图像对象的识别与匹配。

实例化ORB对象

orb = cv.ORB_create(nfeatures)

主要参数说明如下:

  • nfeatures:设定提取特征点的最大数量上限。

调用orb.detectAndCompute()方法检测关键点并计算描述符。

kp, des = orb.detectAndCompute(gray, None)

该方法的参数说明如下:

  • gray:输入待检测的灰度图像。

函数返回结果包含:

  • kp:关键点列表,包含每个关键点的位置、尺度和方向信息。
  • des:关键点描述符,由每个关键点的BRIEF特征向量组成,通常为二进制字符串形式。

将检测到的关键点绘制到图像上进行可视化展示。

cv.drawKeypoints(image, keypoints, outputimage, color, flags)

该绘图函数的参数说明如下:

  • image:原始输入图像。
  • keypoints:包含关键点信息的列表,用于在图像上绘制。
  • outputimage:输出图像对象,可直接使用原始图像作为载体。
  • color:指定画笔颜色,通过设置(b, g, r)元组值来改变颜色,其中b代表蓝色,g代表绿色,r代表红色。
  • flags:控制绘图行为的标识符。

可选的flags值包括: 1、cv2.DRAW_MATCHES_FLAGS_DEFAULT:创建输出图像矩阵,在现有输出图像上绘制匹配对和特征点,每个关键点仅绘制中心点。 2、cv2.DRAW_MATCHES_FLAGS_DRAW_OVER_OUTIMG:不创建新的输出图像矩阵,直接在传入的输出图像上绘制匹配对。 3、cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS:为每个特征点绘制包含大小和方向信息的完整关键点图形。 4、cv2.DRAW_MATCHES_FLAGS_NOT_DRAW_SINGLE_POINTS:不绘制单独的特征点。

import cv2 as cv
from matplotlib import pyplot as plt

# 1.图像读取
img = cv.imread("1.jpg")
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)

# 2.ORB角点检测
# 2.1实例化ORB对象
orb = cv.ORB_create(nfeatures=1000)

# 2.2 检测关键点,并计算特征描述符
kp, des = orb.detectAndCompute(gray, None)

print(des.shape)

# 3.将关键点检测在图像上
img2 = cv.drawKeypoints(img, kp, None, flags=0) # 也可以添加 color 参数指定图像显示关键点的颜色,例如 img2 = cv.drawKeypoints(img, kp, None, color=(0, 0, 255), flags=0)

# 4.绘制图像
plt.figure(figsize=(10, 8), dpi=100)
plt.imshow(img2[:, :, ::-1])
plt.xticks([]),
plt.yticks([])
plt.show()

以上为OpenCV基于ORB算法实现角点检测的全部内容,希望对本读者的学习有所帮助,欢迎继续支持本站。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表