4

我想在 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)
4

4 回答 4

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() 似乎存在一些普遍问题。在 FLANN 匹配器旁边,我对 BackgroundSubtractorMOG2 也有同样的问题。这解决了两个问题。

于 2015-11-13T00:03:54.147 回答
1

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

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

重新编译和 SIFT 应该可以正常工作。

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

于 2015-11-23T18:24:24.703 回答
1

一个修复程序已合并到 OpenCV 的主分支中,我已经确认它可以工作。不幸的是,还没有一个新版本,所以你必须使用夜间构建,但我发现它在 Ubuntu 中相对容易。Adrian Rosebrock 有一篇关于如何从源代码为 UbuntuOSX安装 OpenCV 3 的精彩帖子。如果您遵循 Adrian 的指南并简单地省略了他检查 3.0.0 标签的步骤,您应该保持在 master 上并获取包含修复的最新版本。

于 2016-08-28T16:38:55.270 回答
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 的版本是 alpha。如下例所示。

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

于 2015-10-13T09:36:26.080 回答