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日
------------------------------------------------------------------------------------------------------------*/