2016-01-27 5 views
0

В настоящее время я работаю над opevcv с питоном, но когда я используюсоответствие ошибка в ОРБ с OpenCV 3

kp1 = orb.detect(img1,None) 
    kp2 = orb.detect(img2,None) 
    kp1, des1 = orb.compute(img1, kp1) 
    kp2, des2 = orb.compute(img2, kp2) 
    matches = matcher.match(des1, des2) 

я получаю ошибку, что согласовани не определен

matches = matcher.match(des1, des2) 
    NameError: name 'matcher' is not defined 

, я использую OpenCV 3.0.0 с python 2.7, может кто-нибудь сказать мне, почему я получаю эту ошибку ?? можем ли мы использовать совпадение или нет с python ??

+0

Вы создали [объект Сличитель] (http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_feature2d/py_matcher/py_matcher.html) первый?. Что-то вроде 'matcher = cv2.BFMatcher (cv2.NORM_HAMMING, crossCheck = True)' – Miki

+0

нет, на самом деле я новичок в этом поле, поэтому я не знаю, какой правильный синтаксис для создания объекта-сопряжения. – whishky

+0

Проверьте учебник, опубликованный в ссылка выше – Miki

ответ

2

Сначала необходимо создать объект matcher. Полный пример можно найти на OpenCV tutorials:

import numpy as np 
import cv2 
from matplotlib import pyplot as plt 

img1 = cv2.imread('box.png',0)   # queryImage 
img2 = cv2.imread('box_in_scene.png',0) # trainImage 

# Initiate ORB detector 
orb = cv2.ORB() 

# find the keypoints and descriptors with ORB 
kp1, des1 = orb.detectAndCompute(img1,None) 
kp2, des2 = orb.detectAndCompute(img2,None) 

# create BFMatcher object 
bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True) 

# Match descriptors. 
matches = bf.match(des1,des2) 

# Sort them in the order of their distance. 
matches = sorted(matches, key = lambda x:x.distance) 

# Draw first 10 matches. 
img3 = cv2.drawMatches(img1,kp1,img2,kp2,matches[:10], flags=2) 

plt.imshow(img3),plt.show() 

 Смежные вопросы

  • Нет связанных вопросов^_^