from os.path import join
from os import walk
import numpy as np
import cv2
from matplotlib import pyplot as plt
from sys import argv
folder = './database'
query = cv2.imread(join(folder, "catt_seed.jpg"))
# plt.imshow(query)
# plt.show()
files = []
images = []
descriptors = []
# 在文件夹folder下的所有文件
/*
开发不易,整理也不易,如需要详细的说明文档和程序,以及完整的数据集,训练好的模型,或者进一步开发,
可加作者新联系方式咨询,WX:Q3101759565,QQ:3101759565
*/
# print(descriptors)
# sift特征 cv2.xfeatures2d.SIFT_create()
sift = cv2.xfeatures2d.SIFT_create()
# 计算特征/特征描述符 query_kp, query_ds
query_kp, query_ds = sift.detectAndCompute(query, None)
FLANN_INDEX_KDTREE = 0
# 建立dict1: index_params
index_params = dict(algorithm = FLANN_INDEX_KDTREE, trees = 5)
# 建立dict2: search_params
search_params = dict(checks = 50)
# 进行FlannBasedMatcher cv2.FlannBasedMatcher
flann = cv2.FlannBasedMatcher(index_params, search_params)
# minimum number of matches
MIN_MATCH_COUNT = 5
potential_culprits = {}
# 所有的npy文件
for d in descriptors:
#
print("--------- analyzing %s for matches ------------" % d)
# flann.knnMatch函数
# query_ds:输入图像query描述符
# np.load(join(folder, d): 保存的配对图像的描述符 np.load函数读取.py文件
matches = flann.knnMatch(query_ds, np.load(join(folder, d)), k=2)
good = []
for m, n in matches:
if m.distance < 0.7 * n.distance:
good.append(m)
if len(good) > MIN_MATCH_COUNT:
#
print("%s is a match! (%d)" % (d, len(good)))
else:
print("%s is not a match" % d)
# potential_culprits是字典
# 保存数据库中对应的图像: 与query的len(good)
potential_culprits[d] = len(good)
max_matches = 0
potential_suspect = None
potential_suspect_show = None
# potential_culprits.iteritems(): 是字典的迭代器
# culprit:是对应的key matches是对应的value
for culprit, matches in potential_culprits.items():
if matches > max_matches:
max_matches = matches # 获得最大的匹配数
potential_suspect = culprit
potential_suspect_show = potential_suspect
# potential_suspect为npy文件
# potential_suspect.replace("npy", "")
# 进一步 potential_suspect.replace("npy", "").upper()
print("potential suspect is %s" % potential_suspect.replace("npy", "").upper())
plt.imshow(query)
plt.show()
if potential_suspect_show != None:
plt.imshow(cv2.imread(join(folder, potential_suspect_show.replace("npy", "jpg"))))
plt.show()
Opencv实现程序-部分8
需积分: 5 137 浏览量
2024-03-17
11:54:14
上传
评论
收藏 6KB ZIP 举报
迪哥_AI_人工智能
- 粉丝: 539
- 资源: 128
最新资源
- #P0015. 全排列 超级简单
- pta题库答案c语言之排序4统计工龄.zip
- pta题库答案c语言之树结构7堆中的路径.zip
- pta题库答案c语言之树结构3TreeTraversalsAgain.zip
- pta题库答案c语言之树结构2ListLeaves.zip
- pta题库答案c语言之树结构1树的同构.zip
- 基于C++实现民航飞行与地图简易管理系统可执行程序+说明+详细注释.zip
- pta题库答案c语言之复杂度1最大子列和问题.zip
- 三维装箱问题(Three-Dimensional Bin Packing Problem,3D-BPP)是一个经典的组合优化问题
- 以下是一些关于Linux线程同步的基本概念和方法.txt
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈