OpenCV | sift函数使用——得到特征点

scale invariant feature transform (sift)

图像尺度空间

在一定的范围内,无论物体是大还是小,人眼都可以分辨出来,然而计算机要有相同的能力却很难,所以要让机器能够对物体在不同尺度下有一个统一的认知, 就需要考虑图像在不同的尺度下都存在的特点

lena.jpg

import cv2
import numpy as np

img = cv2.imread('lena.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

另外,需要查一下自己OpenCV的版本号,如果过低或者最新的都是可以用相关函数的。

cv2.__version__

这里可以输出自己的版本号

得到特征点

sift = cv2.xfeatures2d.SIFT_create()
kp = sift.detect(gray,None)
img = cv2.drawKeypoints(gray,kp,img)
cv2.imshow('drawKeypoints',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果:

计算特征

kp,des = sift.compute(gray,kp)
print (np.array(kp).shape)

 输出结果:

(319,)
des.shape

 输出结果:

(319, 128)

 

des[0]

 输出结果:

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 步骤如下: 1. 打开MySQL官网 (https://www.mysql.com/),点击"Downloads"菜单。 2. 在Downloads页面中,选择"MySQL Connector/J",然后点击"Download"按钮。 3. 在MySQL Connector/J页面中,选择适合你系统的版本,然后点击"Download"按钮。 4. 下载完成后,解压文件。 5. 在你的Java项目中,添加MySQL Connector/J JAR文件作为依赖项。 6. 配置数据库连接信息,使用JDBC驱动连接到MySQL数据库。 ### 回答2: 在使用OpenCV库进行SIFT(尺度不变特征变换)特征点识别时,我们可以通过以下步骤来识别多张图像的特征点并进行显示。 1. 导入相关库和模块: 首先,我们需要导入OpenCV库和其他必要的模块,例如`cv2`、`numpy`和`matplotlib`。 2. 加载图像数据: 使用`cv2.imread()`函数加载多张图像数据,并将其存储在不同的变量中。 3. 创建SIFT对象: 利用`cv2.SIFT_create()`函数创建一个SIFT对象。 4. 检测和计算特征点: 利用SIFT对象的`detectAndCompute()`方法来检测和计算图像中的特征点和特征描述符。此方法接受图像数据作为输入,并返回特征点坐标和描述符。 5. 特征点匹配: 使用特征描述符对多张图像的特征点进行匹配。可使用`cv2.BFMatcher()`函数创建一个Brute Force Matcher对象,并用其`match()`方法对特征描述符进行匹配。 6. 显示匹配结果: 将匹配结果可视化,可以使用`cv2.drawMatches()`函数来绘制匹配结果,并将其显示出来。 注意事项: - SIFT算法是有专利保护的,并且在OpenCV的最新版本中可能已被删除。如果无法使用SIFT算法,请使用SURF(加速稳健特征)或ORB(Oriented FAST and Rotated BRIEF)算法进行特征点识别。 - 在将图像数据加载到程序中时,确保图像路径是正确的,同时也要确保图像的内容对应于所需的识别结果。 - 在匹配特征点时,可以尝试不同的匹配算法和参数,以获得更准确的结果。 - 在绘制匹配结果时,可以根据需要自定义显示的大小和颜色。 以上是使用OpenCV库中的SIFT算法来识别多张图像的特征点并进行显示的简要步骤。具体实现的代码可以根据实际需求和环境进行相应的调整和优化。 ### 回答3: 使用OpenCV库中的SIFT算法可以方便地识别多张图像的特征点并显示。下面是一种实现方法: 1. 导入必要的库和模块: ```python import cv2 import numpy as np ``` 2. 加载图像: ```python img1 = cv2.imread('image1.jpg') img2 = cv2.imread('image2.jpg') ``` 3. 创建SIFT对象: ```python sift = cv2.SIFT_create() ``` 4. 检测特征点和计算特征描述符: ```python kp1, des1 = sift.detectAndCompute(img1, None) kp2, des2 = sift.detectAndCompute(img2, None) ``` 5. 对特征点进行可视化: ```python img1 = cv2.drawKeypoints(img1, kp1, img1, flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) img2 = cv2.drawKeypoints(img2, kp2, img2, flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) ``` 6. 显示图像: ```python cv2.imshow("Image 1", img1) cv2.imshow("Image 2", img2) cv2.waitKey() cv2.destroyAllWindows() ``` 这个实现过程使用OpenCV中的SIFT算法,他可以检测到图像中的特征点,并计算出每个特征点的特征描述符。然后使用`drawKeypoints`函数特征点可视化显示在图像上,并通过`imshow`函数展示图像。最后使用`waitKey`和`destroyAllWindows`释放资源和关闭窗口。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值