由于我使用的是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)
答案 0 :(得分: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上也遇到了同样的问题。这解决了两个问题。
答案 1 :(得分:1)
A fix has been merged进入OpenCV的主分支,我已经确认它有效。不幸的是还没有新版本,所以你必须使用每晚构建,但我发现它在Ubuntu中相对容易。 Adrian Rosebrock发表了关于如何从源for Ubuntu和for OSX安装OpenCV 3的精彩帖子。如果你按照Adrian的指南进行操作,只是省略了他检查3.0.0标签的步骤,你应该继续掌握并获得包含修复的最新版本。
答案 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的版本是alpha。阅读如下例所示。
wget https://github.com/Itseez/opencv/archive/3.0.0-rc1.zip -O opencv-3.0.0-rc1.zip