cv2 3.0.0 cv2.FlannBasedMatcher: flann.knnMatch is throwing cv2 error
Asked Answered
A

4

4

I want to use a flann-based matcher in Python as described in http://opencv-python-tutroals.readthedocs.org/en/latest/py_tutorials/py_feature2d/py_matcher/py_matcher.html

Since I am using OpenCV 3.0.0, I had to adjust the code regarding the initialization of the SIFT detector. The rest is taken without changes

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)

When I run the code, I get the following message:

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

in the line:

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

One more comment: If I use brute force matcher, everything works fine:

bf = cv2.BFMatcher()
matches = bf.knnMatch(desc1, desc2, k=2)
Arthritis answered 4/10, 2015 at 9:10 Comment(0)
B
0

I got same problem on my computer. so, I maked a new virtual-machine with Ubuntu 14.04 and tested.

I don't know why.... but, I got this problem solved with OpenCV 3.0.0-rc1.

If you are using OpenCV3.0.0, then try another release of OpenCV3

For installation , I was referring to the following page. http://rodrigoberriel.com/2014/10/installing-opencv-3-0-0-on-ubuntu-14-04/ On this page, Opencv's version is alpha. To read as in the example below.

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

Blackwood answered 13/10, 2015 at 9:36 Comment(1)
The problem also occurs on opencv3 3.1.0 menpo on py35_0.Thickness
M
1

If you're on a Mac and using python3, this did it for me instead of building it from github:

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

and

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

replace python3.4 with your version.


Seems like there's some general problem with the function allocate(). I also had the same problem with BackgroundSubtractorMOG2, beside the FLANN matcher. This fixed both.

Mobley answered 13/11, 2015 at 0:3 Comment(0)
S
1

Comment out line 162 in cv2.cpp in ..\opencv\modules\python\src2

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

Recompile and SIFT should work just fine.

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

Solstice answered 23/11, 2015 at 18:24 Comment(0)
S
1

A fix has been merged into the master branch of OpenCV, and I've confirmed that it works. Unfortunately there hasn't been a new release yet so you'll have to use the nightly build, but I found it relatively easy in Ubuntu. Adrian Rosebrock has a great post on how to install OpenCV 3 from source for Ubuntu and for OSX. If you follow Adrian's guide and simply leave out the step where he checks out the 3.0.0 tag, you should remain on master and get the latest build which includes the fix.

Schiller answered 28/8, 2016 at 16:38 Comment(0)
B
0

I got same problem on my computer. so, I maked a new virtual-machine with Ubuntu 14.04 and tested.

I don't know why.... but, I got this problem solved with OpenCV 3.0.0-rc1.

If you are using OpenCV3.0.0, then try another release of OpenCV3

For installation , I was referring to the following page. http://rodrigoberriel.com/2014/10/installing-opencv-3-0-0-on-ubuntu-14-04/ On this page, Opencv's version is alpha. To read as in the example below.

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

Blackwood answered 13/10, 2015 at 9:36 Comment(1)
The problem also occurs on opencv3 3.1.0 menpo on py35_0.Thickness

© 2022 - 2024 — McMap. All rights reserved.