2015-10-04 135 views
4

我想因爲由於我使用的OpenCV 3.0.0在http://opencv-python-tutroals.readthedocs.org/en/latest/py_tutorials/py_feature2d/py_matcher/py_matcher.htmlCV2 3.0.0 cv2.FlannBasedMatcher:flann.knnMatch拋出CV2錯誤

描述使用Python中基於FLANN匹配器,我不得不調整有關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) 

回答

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實現的版本是阿爾法。閱讀下面的例子。

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

+0

謝謝。這也解決了我的問題。 –

+0

py35_0上的opencv3 3.1.0 menpo也出現此問題。 –

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相同的問題。這固定兩個。

出格162在cv2.cpp ..
1

A fix has been merged到的OpenCV的主分支,我已經證實了它的工作原理。不幸的是,目前還沒有新的版本,所以你不得不使用夜間版本,但是在Ubuntu中我發現它相對容易。 Adrian Rosebrock在如何從源for Ubuntufor OSX安裝OpenCV 3方面發表了一篇很棒的文章。如果你關注Adrian的指南,而忽略了他檢查3.0.0標記的步驟,你應該繼續掌握並獲取包含修復的最新版本。