用SIFT把一张照片与文件夹里的照片做比对并输出照片的名字
时间: 2024-03-23 09:37:25 浏览: 66
这里提供一个Python的示例代码,用于使用SIFT算法比对一张照片和一个文件夹中的照片,并输出匹配照片的文件名。
```python
import cv2
import os
sift = cv2.xfeatures2d.SIFT_create()
# 读取待比对的照片
img1 = cv2.imread('path/to/photo.jpg', cv2.IMREAD_GRAYSCALE)
# 遍历文件夹中的照片
folder_path = 'path/to/folder'
for filename in os.listdir(folder_path):
if filename.endswith('.jpg') or filename.endswith('.jpeg') or filename.endswith('.png'):
img2 = cv2.imread(os.path.join(folder_path, filename), cv2.IMREAD_GRAYSCALE)
# 使用SIFT算法计算关键点和描述符
kp1, des1 = sift.detectAndCompute(img1, None)
kp2, des2 = sift.detectAndCompute(img2, None)
# 进行特征点匹配
bf = cv2.BFMatcher()
matches = bf.knnMatch(des1, des2, k=2)
# 筛选出好的匹配结果
good_matches = []
for m, n in matches:
if m.distance < 0.75 * n.distance:
good_matches.append(m)
# 输出匹配照片的文件名
if len(good_matches) > 10:
print(filename)
```
这段代码使用OpenCV库中的SIFT算法进行特征点匹配,并筛选出好的匹配结果。如果匹配结果中好的匹配点数大于10个,则认为这两张照片是匹配的,输出文件名。注意,这里的输出是通过控制台输出的,如果需要保存到文件中,可以使用Python的文件操作函数。
阅读全文