cv2 3.0.0 cv2.FlannBasedMatcher:flann.knMatch正在抛出cv2

2024-05-13 19:05:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在Python中使用一个基于flann的匹配器,如http://opencv-python-tutroals.readthedocs.org/en/latest/py_tutorials/py_feature2d/py_matcher/py_matcher.html

因为我使用的是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)

Tags: 代码pyselfmatcherparamscv2matchessift
3条回答

在..\opencv\modules\python\src2中的cv2.cpp中注释掉第162行

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

重新编译和筛选应该工作得很好。

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

我的电脑也有同样的问题。 所以,我用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的版本是alpha。阅读下面的例子。

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

A fix has been merged进入OpenCV的主分支,我已经确认它工作正常。不幸的是还没有一个新的版本,所以你必须使用夜间构建,但我发现在Ubuntu中相对容易。Adrian Rosebrock有一篇关于如何从源代码for Ubuntufor OSX安装OpenCV 3的文章。如果你遵循阿德里安的指导,简单地忽略了他检查3.0.0标签的步骤,你就应该保持在master上,并获得包括修复的最新版本。

相关问题 更多 >