别人没那么重要,我也没那么重要,好好活着,把能做的小事做好,够不到的东西就放弃,承认就好。做一个心情好能睡着的人,你所有事情都会在正轨上。

PythonOpenCV-特征检测-点检测

  特征点是图像中具有唯一性的像素,也称兴趣点或者关键点。角是特殊的特征点。

1. FAST特征检测

  FAST 特征检测器主要根据像素周围 16 个像素的强度和值等参数来判断像素是否为关键点。
  可调用 cv2.FastFeatureDetector_create()函数创建一个 FAST 对象,然后调用 FAST 对象的 detect()方法执行关键点检测,该方法将返回一个关键点列表。

  每个关键点对象均包含了关键点的角度、坐标、响应强度和邻域大小等信息。

  代码示例:

import cv2 as cv

img_src = cv.imread('cube.jpg')  # 打开图像,默认BGR格式
cv.imshow('src', img_src)
fast = cv.FastFeatureDetector_create()  # 创建FAST检测器
kp = fast.detect(img_src, None)  # 检测关键点,不使用掩模
img2 = cv.drawKeypoints(img_src, kp, None, color=(0, 0, 255))  # 绘制关键点
cv.imshow('FAST points', img2)  # 显示绘制了关键点的图像
fast.setThreshold(20)  # 设置阈值,默认阈值为10
kp = fast.detect(img_src, None)  # 检测关键点,不使用掩模
n = 0
for p in kp:
    print("第%s个关键点,坐标:" % (n + 1), p.pt, '响应强度:', p.response, '邻域大小:', p.size, '角度:', p.angle)
    n += 1
img3 = cv.drawKeypoints(img_src, kp, None, color=(0, 0, 255))
cv.imshow('Threshold20', img3)  # 显示绘制了关键点的图像
cv.waitKey(0)

  运行结果:

 

2. SIFT特征检测

  图像中的角具有旋转不变特征,即旋转图像时角不会发生变化;但在放大或者缩小图像时,角可能发生变化。

  SIFT是指尺度不变特征变换,SIFT 算法用于查找图像中的尺度不变特征,返回图像中的关键点

  OpenCV提供的 cv2.SIFT_create()函数用于创建 SIFT对象,然后调用SIFT对象的 detect()方法执行 SIFT 算法检测关键点

  代码示例:

import cv2 as cv
import matplotlib.pyplot as plt

img = cv.imread('five.jpg')  # 打开图像,默认BGR格式

gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)  # 转换为灰度图像
sift = cv.SIFT_create()  # 创建SIFT对象
kp = sift.detect(gray, None)  # 检测关键点
img2 = cv.drawKeypoints(img, kp, None, flags=cv.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)  # 绘制关键点
img2 = cv.cvtColor(img2, cv.COLOR_BGR2RGB)  # 转换为RGB图像
plt.imshow(img2)
plt.axis('off')
plt.show()  # 显示绘制了关键点的图像

  运行结果:

 

3. ORB 特征检测

  ORB 特征检测以 FAST 特征检测器和 BRIEF 描述符为基础进行了改进以获得更好的特征检测性能。

  OpenCV 提供的 cv2.0RB_create()函数用于创建 ORB 对象,然后调用 ORB 对象的 detect()(方法执行 ORB 算法检测关键点

  代码示例:

import cv2 as cv

img_src = cv.imread('cube.jpg')  # 打开图像,默认BGR格式
cv.imshow('src', img_src)
orb = cv.ORB_create()  # 创建ORB检测器对象
kp = orb.detect(img_src, None)  # 检测关键点
img2 = cv.drawKeypoints(img_src, kp, None, color=(0, 0, 2550))  # 绘制关键点
cv.imshow('ORB', img2)  # 显示绘制了特征点的图像
cv.waitKey(0)

  运行结果:

  

 

 

 

 

 

 

 

 

 

/*-------------------------------------------------------------------------------------------------------

笔者说明:

  该笔记来源于本人学习Python + OpenCv时的资料,

  分享出来只是为了供大家学习,并且为了自己以后想要用的时候方便寻找。

时间:2023年9月3日

------------------------------------------------------------------------------------------------------------*/

posted @ 2023-09-03 11:00  一路狂奔的乌龟  阅读(288)  评论(0)    收藏  举报
返回顶部