代码和笔记
import cv2
import numpy as np"""
特征检测和匹配
1. 定义:提取图像信息,决定每个图像的点是否属于一个图像特征。
特征检测的结果是把图像上的点分为不同的子集,这些子集往往属于孤立的点、连续的曲线或者连续的区域
2. 包含边缘检测、角检测、区检测和脊检测
3. 应用场景:图像搜索、拼图游戏、图像拼接特征是唯一的、可追踪的、能比较的--角点
角点是图像中的重要特征点,它们包含了丰富的图像信息。通过角点检测,可以从图像中提取出这些特征点,用于后续的图像分析、处理和识别任务。
属于角点的是:图像中灰度梯度变化显著的点,或者是一阶导数(即灰度梯度)的局部最大对应的像素点。两条及两条以上的边缘的交点。
""" """
特征检测
"""
img = cv2. imread( './img/cat.jpeg' )
gary = cv2. cvtColor( img, cv2. COLOR_BGR2GRAY) """
Harris 角点检测
"""
dst = cv2. cornerHarris( gary, blockSize= 2 , ksize= 3 , k= 0.04 )
img[ dst > ( 0.01 * dst. max ( ) ) ] = [ 0 , 0 , 255 ] cv2. imshow( 'img1' , img) """
Harris具有旋转不变性,即旋转后角点还是原来的角点,但是缩放后就可能不是了。
SIFT关键点检测:尺寸不变性,
"""
sift = cv2. SIFT_create( )
kp = sift. detect( gary)
kp, des = sift. compute( gary, kp)
cv2. drawKeypoints( gary, kp, img)
cv2. imshow( 'img2' , img) """
Shi-Tomasi角点检测:Harris的改进版,因为Harris的稳定性与k有关,不太好设定
稳定性实质上与矩阵M的较小特征值有关,直接用这个特征值作为分数就不需要调整k了
"""
corners = cv2. goodFeaturesToTrack( gary, maxCorners= 0 , qualityLevel= 0.01 , minDistance= 10 )
corners = np. int0( corners)
for i in corners: x, y = i. ravel( ) cv2. circle( img, ( x, y) , 3 , ( 0 , 0 , 255 ) , - 1 ) cv2. imshow( 'img3' , img) """
SURF特征检测:稳健,SIFT的改进,提升了效率。注意:只有OpenCV 3.4.1.15以下才能用
用法和SIFT类型,换成SURF_create()就OK
""" """
ORB特征检测:速度快,替代SURF,最大优势:实时检测
"""
orb = cv2. ORB_create( )
kp = orb. detect( gary)
kp, des = orb. compute( img, kp)
print ( des) cv2. waitKey( 0 )
cv2. destroyAllWindows( )