OpenCV は、FAST アルゴリズムのコーナーポイント検出と ORB アルゴリズムの特徴点検出を実装します。

目次

1 高速アルゴリズム

1.1 高速アルゴリズムの原理

1.2 実装方法

1.2.1 機械学習コーナー検出器

1.2.2 非最大抑制

1.3 コードの実装

1.4 結果表示

2.ORBアルゴリズム

2.1 コードの実装

2.2 結果表示


1 高速アルゴリズム

1.1 高速アルゴリズムの原理

1.2 実装方法

1.2.1 機械学習コーナー検出器

1.2.2 非最大抑制

1.3 コードの実装

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 結果表示

2.ORBアルゴリズム

2.1 コードの実装

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 結果表示

おすすめ

転載: blog.csdn.net/qq_53545309/article/details/133315751