OpenCV implementa la detección de puntos de esquina del algoritmo FAST y la detección de puntos de características del algoritmo ORB

Tabla de contenido

1 algoritmo rápido

1.1 Principio del algoritmo rápido

1.2 Método de implementación

1.2.1 Detector de esquinas de aprendizaje automático

1.2.2 Supresión no máxima

1.3 Implementación del código

1.4 Visualización de resultados

2. Algoritmo ORB

2.1 Implementación del código

2.2 Visualización de resultados


1 algoritmo rápido

1.1 Principio del algoritmo rápido

1.2 Método de implementación

1.2.1 Detector de esquinas de aprendizaje automático

1.2.2 Supresión no máxima

1.3 Implementación del código

import cv2 as cv
import matplotlib.pyplot as plt
import numpy as np
from  pylab import mpl

mpl.rcParams['font.sans-serif']  = ['SimHei']

img = cv.imread("corner.png")

#Fast 角点检测

'''创建一个fast对象,传入阈值,  注意: 可以处理彩色空间图像'''
fast = cv.FastFeatureDetector_create(threshold=30)

#检测图像上的关键点
kp = fast.detect(img , None)

#在图像上绘制关键点
img2 = cv.drawKeypoints(img , kp , None ,color=(0,0,255))

#输出默认参数
'''打印默认参数的值,包括阈值、是否使用非极大值抑制、邻域大小以及检测到的关键点数量'''
print("Threshold: {}".format(fast.getThreshold()))
print("nonmaxSuppression:{}".format(fast.getNonmaxSuppression()))
print("neighborhood: {}".format(fast.getType()))
print("Total Keypoints with nonmaxSuppression".format(len(kp)))

#  关闭非极大值抑制
fast.setNonmaxSuppression(0)
kp = fast.detect(img , None)

print("Total Keypoints without nonmaxSuppression :{}".format(len(kp)))

#绘制未  加入  非极大值抑制的结果
img3 = cv.drawKeypoints(img , kp,None ,color=(0,0,255))

#绘制图像
fig , axes = plt.subplots(nrows=1 , ncols=2,figsize=(5,4),dpi=100)
axes[0].imshow(img2[:,:,::-1])
axes[0].set_title("加入非极大值抑制")

axes[1].imshow(img3[:,:,::-1])
axes[1].set_title("未加入非极大值抑制")
plt.show()

1.4 Visualización de resultados

2. Algoritmo ORB

2.1 Implementación del código

import cv2 as cv
import matplotlib.pyplot as plt
import numpy as np
from  pylab import mpl

mpl.rcParams['font.sans-serif']  = ['SimHei']

img = cv.imread("corner.png")

#2  ORB算法角点检测
#2.1  实例化ORB对象
'''创建了一个ORB(Oriented FAST and Rotated BRIEF)特征检测器对象,并设置了最大特征点数为500。'''
orb = cv.ORB_create(nfeatures=500)

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

print(des.shape)
'''
orb.detectAndCompute()函数接受两个参数:图像(img)和掩码(None)。它将返回两个结果:关键点(kp)和描述子(des)。

关键点(kp)是一个包含检测到的关键点信息的列表。每个关键点包含其在图像中的位置、尺度、方向等属性。

描述子(des)是一个二维数组,形状为(N, 32),其中N是检测到的关键点数量。每一行代表一个关键点的描述子,描述子是一个长度为32的二进制向量。

通过打印des.shape,可以输出描述子的形状。这里的输出表示检测到的关键点数量为N,每个关键点的描述子长度为32。'''

#将关键点绘制在图像上
img2 = cv.drawKeypoints(img , kp ,None ,color=(0,0,255),flags=0)

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

2.2 Visualización de resultados

Supongo que te gusta

Origin blog.csdn.net/qq_53545309/article/details/133315751
Recomendado
Clasificación