import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = ['sans-serif']
plt.rcParams['font.sans-serif'] = ['SimHei']
D:\Anaconda\AZWZ\lib\site-packages\numpy\_distributor_init.py:30: UserWarning: loaded more than 1 DLL from .libs:
D:\Anaconda\AZWZ\lib\site-packages\numpy\.libs\libopenblas.NOIJJG62EMASZI6NYURL6JBKM4EVBGM7.gfortran-win_amd64.dll
D:\Anaconda\AZWZ\lib\site-packages\numpy\.libs\libopenblas.WCDJNK7YVMPZQ2ME2ZZHJJRJ3JIKNDB7.gfortran-win_amd64.dll
warnings.warn("loaded more than 1 DLL from .libs:\n%s" %
1.Sift关键点检测
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O8eM3Frh-1637753728937)(attachment:image.png)]](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/ce8cb9811279477690cf0ba583449425~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.awebp)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RGVkNRNk-1637753728939)(attachment:image.png)]](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/04fc9820ef4e4b7a965c51efa155d2e9~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.awebp)
tv = cv.imread('img/tv.jpg')
gray = cv.cvtColor(tv,cv.COLOR_BGR2GRAY)
sift = cv.SIFT_create()
kp,des = sift.detectAndCompute(gray,None)
cv.drawKeypoints(tv,kp,tv,flags=cv.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
array([[[255, 255, 255],
[255, 255, 255],
[255, 255, 255],
...,
[255, 255, 255],
[255, 255, 255],
[255, 255, 255]],
[[255, 255, 255],
[255, 255, 255],
[255, 255, 255],
...,
[255, 255, 255],
[255, 255, 255],
[255, 255, 255]],
[[255, 255, 255],
[255, 255, 255],
[255, 255, 255],
...,
[255, 255, 255],
[255, 255, 255],
[255, 255, 255]],
...,
[[255, 255, 255],
[255, 255, 255],
[255, 255, 255],
...,
[255, 255, 255],
[255, 255, 255],
[255, 255, 255]],
[[255, 255, 255],
[255, 255, 255],
[255, 255, 255],
...,
[255, 255, 255],
[255, 255, 255],
[255, 255, 255]],
[[255, 255, 255],
[255, 255, 255],
[255, 255, 255],
...,
[255, 255, 255],
[255, 255, 255],
[255, 255, 255]]], dtype=uint8)
plt.figure(dpi=500)
plt.imshow(tv[:,:,::-1])
<matplotlib.image.AxesImage at 0x21d6721dc40>
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3dY4ZoCV-1637753728941)(output_9_1.png)]](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/6766a7465d9549f1ab9aab180fe05d3e~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.awebp)
2.Fast算法
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ngDagZL4-1637753728943)(attachment:image.png)]](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/d6df672d401a4d0d84cc4f1fe1594bb2~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.awebp)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VzUbDx33-1637753728945)(attachment:image.png)]](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/eeb27ea2ae874d9d9b13ebd7c7db62dd~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.awebp)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UEQeEJrX-1637753728946)(attachment:image.png)]](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/df04166f2c6542608c11d77cf6b57ede~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.awebp)
注:也可以传入彩色图像!
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-keHiaidI-1637753728947)(attachment:image.png)]](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/805ff41558874f559b0b311c076adae2~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.awebp)
tv = cv.imread('img/tv.jpg')
fast = cv.FastFeatureDetector_create(threshold=30)
kp = fast.detect(tv,None)
img2 = cv.drawKeypoints(tv,kp,None,color=(0,0,255))
print("Threshold:{}".format(fast.getThreshold()))
print("NonmaxSuppression:{}".format(fast.getNonmaxSuppression()))
print("neighborhood:{}".format(fast.getType()))
print("Total Keypoints with nonmaxSupperssion:{}".format(len(kp)))
Threshold:30
NonmaxSuppression:True
neighborhood:2
Total Keypoints with nonmaxSupperssion:3539
fast.setNonmaxSuppression(0)
kp = fast.detect(tv,None)
print("Total Keypoints with nonmaxSupperssion:{}".format(len(kp)))
Total Keypoints with nonmaxSupperssion:8959
img3 = cv.drawKeypoints(tv,kp,None,color=(0,0,255))
plt.figure(figsize=(20,20))
plt.subplot(1,2,1)
m1 = plt.imshow(img2[:,:,::-1])
plt.title("加入非极大值抑制")
plt.subplot(1,2,2)
m2 = plt.imshow(img3[:,:,::-1])
plt.title("未加入非极大值抑制")
plt.show()
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bEjBh0zN-1637753728947)(output_23_0.png)]](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/f283567b2cf64a5785ec2db80a8ac6c7~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.awebp)
3.ORB算法
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-832zo03C-1637753728949)(attachment:image.png)]](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/e19755c77d60492cb7de8b51e3556276~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.awebp)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o26OPPVB-1637753728950)(attachment:image.png)]](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/256112270b1640a092d51217301781a9~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.awebp)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sqUDK1wR-1637753728952)(attachment:image.png)]](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/df485d52332049d9a51cc27143ca12bb~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.awebp)
tv = cv.imread('img/tv.jpg')
orb = cv.ORB_create(nfeatures=5000)
kp,des = orb.detectAndCompute(tv,None)
print("des.shape:",des.shape)
des.shape: (4395, 32)
res = cv.drawKeypoints(tv,kp,None,color=(0,0,255),flags = 0)
plt.figure(dpi=400)
plt.imshow(res[:,:,::-1])
<matplotlib.image.AxesImage at 0x15efb643280>
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tcDqElDr-1637753728952)(output_32_1.png)]](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/89f34a2f3b26457d8c371e5fc6d29faa~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.awebp)
总结
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iVQFiZoy-1637753728954)(attachment:image.png)]](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/4d7e86b5725941caaa5d6820c9ac7df1~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.awebp)