Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python cv2 3.0.0 cv2.FlannBasedMatcher:flann.knMatch抛出cv2错误_Python_Opencv_Flann - Fatal编程技术网

Python cv2 3.0.0 cv2.FlannBasedMatcher:flann.knMatch抛出cv2错误

Python cv2 3.0.0 cv2.FlannBasedMatcher:flann.knMatch抛出cv2错误,python,opencv,flann,Python,Opencv,Flann,我想在Python中使用基于flann的匹配器,如中所述 因为我使用的是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) = s

我想在Python中使用基于flann的匹配器,如中所述

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

我的电脑也有同样的问题。 所以,我用Ubuntu 14.04制作了一个新的虚拟机并进行了测试

我不知道为什么。。。。但是,我用OpenCV 3.0.0-rc1解决了这个问题

如果您使用的是OpenCV3.0.0,请尝试另一个版本的OpenCV3

关于安装,我参考了下一页。 在这个页面上,Opencv的版本是alpha。如下面的例子所示


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

如果您在Mac电脑上使用python3,那么这是为我做的,而不是从github构建:

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

用您的版本替换python3.4



函数allocate()似乎存在一些一般性问题。我也有同样的问题与背景MOG2,旁边的法兰匹配。这修复了这两个问题。

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

CV_Error(Error::StsAssert, "The data should normally be NULL!")
重新编译和筛选应该可以正常工作


来源:

进入OpenCV的主分支,我已经确认它是有效的。不幸的是,现在还没有新的版本,所以你必须使用夜间构建,但我发现在Ubuntu中它相对容易。Adrian Rosebrock有一篇关于如何从源代码和源代码安装OpenCV 3的文章。如果您遵循Adrian的指导,只需省去他检查3.0.0标签的步骤,您应该继续使用master并获得包含修复程序的最新版本。

问题也发生在py35_0上的opencv3 3.1.0 menpo上。
CV_Error(Error::StsAssert, "The data should normally be NULL!")