【OpenCV-Python】28.OpenCV的特征检测——特征点检测

28.OpenCV的特征检测——特征点检测


文章目录

  • 前言
  • 一、FAST特征检测
  • 二、SIFT特征检测
  • 三、ORB特征检测
  • 四、OpenCV-Python资源下载
  • 总结


前言

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


一、FAST特征检测

  FAST特征检测器主要根据像素周围16个像素的强度和阈值等参数来判断像素点是否为关键点。
  在OpenCV中可调用cv2.FastFeatureDetector_create()函数创建一个FAST对象,然后调用FAST对象的detect()方法执行关键点检测,该方法将返回一个关键点列表。每个关键点对象均包含了关键点的角度、坐标、响应强度和领域大小等信息。

import cv2

img = cv2.imread("cube.jpg")
cv2.imshow("Cube", img)

fast = cv2.FastFeatureDetector_create()      						# 创建FAST检测器
kp = fast.detect(img, None)                  						# 检测关键点,不使用掩膜
img2 = cv2.drawKeypoints(img, kp, None, color=(0, 0, 255))
cv2.imshow("FAST point", img2)

fast.setThreshold(20)
kp = fast.detect(img, None)
n = 0
for p in kp:
    print("第%s个关键点,坐标:"%(n+1), p.pt, "相应强度:", p.response, "领域大小:", p.size,"角度:", p.angle)
    n += 1
    
img3 = cv2.drawKeypoints(img, kp, None, color=(0, 0, 255))
cv2.imshow("Threshold_20", img3)

cv2.waitKey(0)
cv2.destroyAllWindows()

【OpenCV-Python】28.OpenCV的特征检测——特征点检测_第1张图片
  运行结果如图所示,中间图为FAST对象使用默认阈值(10)时检测到的关键点,右图是阈值设置为20时检测到的关键点,可以看到阈值越大,返回的关键点数量越少。
【OpenCV-Python】28.OpenCV的特征检测——特征点检测_第2张图片
  程序输出了设置阈值为20后返回的关键点信息,FAST算法返回的关键点的响应强度值代表了该点属于角的概率,响应强度值越大,该点越有可能属于角。


二、SIFT特征检测

  图像中的角具有旋转不变性,即旋转图像时角不会发生变化,但在放大或缩小图像时,角可能发生变化。
  SIFT是指尺度不变特征变换,SIFT算法用于查找图像中的尺度不变特征,返回图像中的关键点。
  OpenCV提供的cv2.SIFT_create()函数用于创建SIFT对象,然后调用SIFT对象的detect()方法执行SIFT算法检测关键点。

import cv2

img = cv2.imread("five.jpg")
cv2.imshow("Five", img)

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
sift = cv2.SIFT_create()
kp = sift.detect(gray, None)
img2 = cv2.drawKeypoints(img, kp, None, flags = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
cv2.imshow("SIFT points", img2)

cv2.waitKey(0)
cv2.destroyAllWindows()

  在绘制关键点时,将cv2.drawKeypoints中的flags参数设置为cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS时,可以根据不同响应强度值在关键点位置绘制大小不同的圆,并可同时标注方向。

【OpenCV-Python】28.OpenCV的特征检测——特征点检测_第3张图片


三、ORB特征检测

  ORB特征检测是以FAST特征检测器和BRIEF描述符为基础进行了改进,以获得更好的特征检测性能。
  OpenCV提供的cv2.ORB_create()函数用于创建ORB对象,然后调用ORB对象的detect()方法执行ORB算法检测关键点。

import cv2

img = cv2.imread("cube.jpg")
cv2.imshow("Cube", img)

orb = cv2.ORB_create()
kp = orb.detect(img, None)
img2 = cv2.drawKeypoints(img, kp, None, color=(0, 0, 255))
cv2.imshow("ORB points", img2)

cv2.waitKey(0)
cv2.destroyAllWindows()

【OpenCV-Python】28.OpenCV的特征检测——特征点检测_第4张图片


四、OpenCV-Python资源下载

OpenCV-Python测试用图片、中文官方文档、opencv-4.5.4源码


总结

  以上内容介绍了OpenCV-Python特征检测中的特征点检测,有关Python、数据科学、人工智能等文章后续会不定期发布,请大家多多关注,一键三连哟(●’◡’●)。

你可能感兴趣的:(OpenCV-Python,opencv,python,计算机视觉)