|
本帖最后由 javaman0616 于 2018-8-22 11:46 编辑
使用opencv 提取sift特征后,进行FlannBasedMatcher里的kdtree查找,结果不一致,是不是同一个进程里面,前后的kdtree有影响?
如果是这样,如何让每次结果都一致?
求大神帮助
谢谢
python 代码:
- import cv2
- def match(des_q, des_t):
- FLANN_INDEX_KDTREE = 1
- ratio = 0.7
- index_params = dict(algorithm=FLANN_INDEX_KDTREE, trees=5)
- search_params = dict(checks=50)
- flann1 = cv2.FlannBasedMatcher(index_params, search_params)
- two_nn = flann1.knnMatch(des_q, des_t, k=2)
- matches = [(first.queryIdx, first.trainIdx) for first, second in two_nn
- if first.distance < ratio * second.distance]
- print(matches)
- return matches
- def img_sim(img1, img2):
- img1 = cv2.cvtColor(img1, cv2.IMREAD_GRAYSCALE)
- img2 = cv2.cvtColor(img2, cv2.IMREAD_GRAYSCALE)
- sift = cv2.xfeatures2d.SIFT_create()
- eps = 1e-7
- # find the keypoints and descriptors with SIFT
- kp1, des1 = sift.detectAndCompute(img1, None)
- des1 /= (des1.sum(axis=1, keepdims=True) + eps)
- des1 = np.sqrt(des1)
- kp2, des2 = sift.detectAndCompute(img2, None)
- des2 /= (des2.sum(axis=1, keepdims=True) + eps)
- des2 = np.sqrt(des2)
- #测试,输入同样的sift特征值(des1,des2),返回的结果不一致
- matches1 = match(des1, des2)
- matches2 = match(des1, des2)
- img1 = "" # 查询图片
- img2 = "" # 索引图片
- img1 = cv2.cvtColor(cv2.imread(img1), cv2.COLOR_BGR2RGB)
- img2 = cv2.cvtColor(cv2.imread(img2), cv2.COLOR_BGR2RGB)
- img_sim(img1, img2)
复制代码
|
|