cv2 3.0.0 cv2.FlannBasedMatcher: flann.knnMatch está lanzando el error cv2

Quiero usar un matcher basado en flann en Python como se describe en http://opencv-python-tutroals.readthedocs.org/en/latest/py_tutorials/py_feature2d/py_matcher/py_matcher.html

Dado que estoy utilizando OpenCV 3.0.0, tuve que ajustar el código con respecto a la inicialización del detector SIFT. El rest se toma sin cambios.

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) 

Cuando ejecuto el código, recibo el siguiente mensaje:

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

En la linea:

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

Un comentario más: si uso el comparador de fuerza bruta, todo funciona bien:

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

Tengo el mismo problema en mi computadora. Entonces, hice una nueva máquina virtual con Ubuntu 14.04 y la probé.

No sé por qué … pero resolví este problema con OpenCV 3.0.0-rc1.

Si está utilizando OpenCV3.0.0, intente con otra versión de OpenCV3

Para la instalación, me refería a la siguiente página. http://rodrigoberriel.com/2014/10/installing-opencv-3-0-0-on-ubuntu-14-04/ En esta página, la versión de Opencv es alfa. Para leer como en el siguiente ejemplo.

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

Comente la línea 162 en cv2.cpp en .. \ opencv \ modules \ python \ src2

 CV_Error(Error::StsAssert, "The data should normally be NULL!") 

Recompile y SIFT debería funcionar bien.

Fuente: http://answers.opencv.org/question/76952/regarding-the-error-message-the-data-should-normally-be-null/

Se ha fusionado una solución en la twig maestra de OpenCV, y he confirmado que funciona. Lamentablemente, aún no ha habido una nueva versión, así que tendrás que usar la versión nocturna, pero me pareció relativamente fácil en Ubuntu. Adrian Rosebrock tiene una excelente publicación sobre cómo instalar OpenCV 3 desde la fuente para Ubuntu y para OSX . Si sigues la guía de Adrian y simplemente dejas de lado el paso en el que verifica la etiqueta 3.0.0, debes permanecer en el master y obtener la última versión que incluye la solución.

Si estás usando una Mac y estás usando python3, esto lo hizo por mí en lugar de hacerlo desde github:

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

y

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

Reemplace python3.4 con su versión.


Parece que hay algún problema general con la función allocate (). También tuve el mismo problema con BackgroundSubtractorMOG2, al lado del comparador FLANN. Esto solucionó ambos.