2015-10-04 2 views
4

Я хочу использовать Flann на основе Искателя в Python, как описано в http://opencv-python-tutroals.readthedocs.org/en/latest/py_tutorials/py_feature2d/py_matcher/py_matcher.htmlCV2 3.0.0 cv2.FlannBasedMatcher: flann.knnMatch бросает ошибку CV2

Поскольку я использую OpenCV 3.0.0, мне пришлось настроить код, касающийся инициализации SIFT-детектора. Остальные взяты без изменений

def calculateMatch(self): 
    # Initiate SIFT detector 
    sift = cv2.xfeatures2d.SIFT_create() 

    # find the keypoints and descriptors with SIFT 
    (kp1, desc1) = sift.detectAndCompute(self.image1,None) 
    (kp2, desc2) = sift.detectAndCompute(self.image2,None) 

    # FLANN parameters 
    FLANN_INDEX_KDTREE = 0 

    index_params = dict(algorithm = FLANN_INDEX_KDTREE, trees = 5) 
    search_params = dict(checks=50) # or pass empty dictionary 

    flann = cv2.FlannBasedMatcher(index_params,search_params) 
    matches = flann.knnMatch(desc1,desc2,k=2) 

Когда я запускаю код, я получаю следующее сообщение:

cv2.error: cv2.cpp:161: error: (-215) The data should normally be NULL! in function allocate 

в строке:

matches = flann.knnMatch(desc1,desc2,k=2)   

Еще один комментарий: Если я использовать переборную команду, все работает нормально:

bf = cv2.BFMatcher() 
matches = bf.knnMatch(desc1, desc2, k=2) 

ответ

0

У меня такая же проблема на моем компьютере. Итак, я собрал новую виртуальную машину с Ubuntu 14.04 и протестировал ее.

Я не знаю почему .... но я решил эту проблему решить с помощью OpenCV 3.0.0-rc1.

Если вы используете OpenCV3.0.0, то попробуйте другой выпуск OpenCV3

Для установки, я имел в виду на следующей странице. http://rodrigoberriel.com/2014/10/installing-opencv-3-0-0-on-ubuntu-14-04/ На этой странице версия Opencv является альфа. Чтобы прочитать, как в примере ниже.

wget https://github.com/Itseez/opencv/archive/3.0.0-rc1.zip -O opencv-3.0.0-rc1.zip

+0

Спасибо. Это тоже решило мою проблему. –

+0

Проблема также возникает в opencv3 3.1.0 menpo на py35_0. –

1

Если вы на Mac и используя python3, это сделал для меня, а не строить его из GitHub:

brew install opencv3 --with-python3 --with-contrib 

и

export PYTHONPATH=$PYTHONPATH:/usr/local/Cellar/opencv3/3.0.0/lib/python3.4/site-packages 

заменить python3. 4 с вашей версией.


Похоже, что существует некоторая общая проблема с функцией allocate(). У меня также была такая же проблема с BackgroundSubtractorMOG2, рядом с контроллером FLANN. Это фиксировало оба.

1

A fix has been merged в основную ветвь OpenCV, и я подтвердил, что он работает. К сожалению, еще не было новой версии, поэтому вам придется использовать ночную сборку, но в Ubuntu мне было относительно легко. У Адриана Розброка есть отличная статья о том, как установить OpenCV 3 из источников for Ubuntu и for OSX. Если вы следуете руководству Адриана и просто не делаете шаг, где он проверяет тэг 3.0.0, вы должны оставаться на хозяине и получать последнюю сборку, которая включает исправление.