OpenCV中文网站

 找回密码
 立即注册
搜索
热搜: 安装 配置
查看: 2346|回复: 0

opencv 提取sift特征后,构建kdtree查找后,结果不一致

[复制链接]
发表于 2018-8-22 11:21:22 | 显示全部楼层 |阅读模式
本帖最后由 javaman0616 于 2018-8-22 11:46 编辑

使用opencv 提取sift特征后,进行FlannBasedMatcher里的kdtree查找,结果不一致,是不是同一个进程里面,前后的kdtree有影响?
如果是这样,如何让每次结果都一致?
求大神帮助

谢谢

python 代码:

  1. import cv2
  2. def match(des_q, des_t):
  3.     FLANN_INDEX_KDTREE = 1
  4.     ratio = 0.7  
  5.     index_params = dict(algorithm=FLANN_INDEX_KDTREE, trees=5)
  6.     search_params = dict(checks=50)
  7.     flann1 = cv2.FlannBasedMatcher(index_params, search_params)
  8.     two_nn = flann1.knnMatch(des_q, des_t, k=2)
  9.     matches = [(first.queryIdx, first.trainIdx) for first, second in two_nn
  10.                    if first.distance < ratio * second.distance]
  11.     print(matches)
  12.     return matches

  13. def img_sim(img1, img2):
  14.     img1 = cv2.cvtColor(img1, cv2.IMREAD_GRAYSCALE)
  15.     img2 = cv2.cvtColor(img2, cv2.IMREAD_GRAYSCALE)
  16.     sift = cv2.xfeatures2d.SIFT_create()
  17.     eps = 1e-7
  18.     # find the keypoints and descriptors with SIFT
  19.     kp1, des1 = sift.detectAndCompute(img1, None)
  20.     des1 /= (des1.sum(axis=1, keepdims=True) + eps)
  21.     des1 = np.sqrt(des1)
  22.     kp2, des2 = sift.detectAndCompute(img2, None)
  23.     des2 /= (des2.sum(axis=1, keepdims=True) + eps)
  24.     des2 = np.sqrt(des2)
  25.     #测试,输入同样的sift特征值(des1,des2),返回的结果不一致
  26.     matches1 = match(des1, des2)
  27.     matches2 = match(des1, des2)

  28. img1 = "" # 查询图片
  29. img2 = "" # 索引图片
  30. img1 = cv2.cvtColor(cv2.imread(img1), cv2.COLOR_BGR2RGB)
  31. img2 = cv2.cvtColor(cv2.imread(img2), cv2.COLOR_BGR2RGB)
  32. img_sim(img1, img2)
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|OpenCV中文网站

GMT+8, 2024-5-6 02:38 , Processed in 0.008038 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表