飞道的博客

SIFT特征提取和匹配

322人阅读  评论(0)

一、sift特征原理部分:

SIFT特征详解 - Brook_icv - 博客园 (cnblogs.com)

 sift特征提取算法_July_Zh1的博客-CSDN博客_sift特征提取算法

二、sift特征提取实践部分:

代码实现:Python+OpenCV


  
  1. import cv2
  2. def sift_kp( image):
  3. gray_image = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
  4. sift = cv2.SIFT.create()
  5. kp,des = sift.detectAndCompute(image, None)
  6. #kp_image = cv2.drawKeypoints(image, kp, None)
  7. kp_image = cv2.drawKeypoints(image, kp, image, ( 122, 255, 122), flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
  8. return kp_image,kp,des
  9. #image = cv2.imread('E:\pythonProject\\N2.jpg')
  10. #image = cv2.imread('E:\pythonProject\image1.jpg')
  11. image = cv2.imread( 'E:\pythonProject\ldh1.jpg')
  12. kp_image, _, des = sift_kp(image)
  13. print(image.shape, des.shape)
  14. cv2.namedWindow( 'sift features',cv2.WINDOW_NORMAL)
  15. cv2.imshow( 'sift features', kp_image)
  16. if cv2.waitKey( 0) == 27:
  17. cv2.destroyAllWindows()

老版本的OpenCV,则第四行用

sift = cv2.xfeatures2d_SIFT.create()

代替 

参考:OpenCV-Python之——图像SIFT特征提取 - 简书 (jianshu.com)

三、sift特征的关键点显示部分:

cv2.drawKeypoints(image, keypoints, outImage, color=None, flags=None)
image    原始图像,可以使三通道或单通道图像;

keypoints    特征点向量,向量内每一个元素是一个KeyPoint对象,包含了特征点的各种属性信息;
outImage    特征点绘制的画布图像,可以是原图像;
color    绘制的特征点的颜色信息,默认绘制的是随机彩色;
flags    特征点的绘制模式,其实就是设置特征点的那些信息需要绘制,那些不需要绘制,有以下几种模式可选:

DRAW_MATCHES_FLAGS_DEFAULT:只绘制特征点的坐标点,显示在图像上就是一个个小圆点,每个小圆点的圆心坐标都是特征点的坐标。
DRAW_MATCHES_FLAGS_DRAW_OVER_OUTIMG:函数不创建输出的图像,而是直接在输出图像变量空间绘制,要求本身输出图像变量就是一个初始化好了的,size与type都是已经初始化好的变量。
DRAW_MATCHES_FLAGS_NOT_DRAW_SINGLE_POINTS :单点的特征点不被绘制。
DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS:绘制特征点的时候绘制的是一个个带有方向的圆,这种方法同时显示图像的坐标,size和方向,是最能显示特征的一种绘制方式

参考:cv2.drawKeypoints函数(opencv学习)_勤奋骚年的博客-CSDN博客_cv2.drawkeypoints


转载:https://blog.csdn.net/GGY1102/article/details/128430788
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场