cv2 3.0.0 cv2.FlannBasedMatcher: flann.knnMatch 抛出 cv2 错误
cv2 3.0.0 cv2.FlannBasedMatcher: flann.knnMatch is throwing cv2 error
我想在 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)
我的电脑也有同样的问题。
所以,我用 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
如果你在 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 也有同样的问题。这两个都修复了。
在..\opencv\modules\python\src2
中注释掉cv2.cpp中的第162行
CV_Error(Error::StsAssert, "The data should normally be NULL!")
重新编译和 SIFT 应该可以正常工作。
A fix has been merged into the master branch of OpenCV, and I've confirmed that it works. Unfortunately there hasn't been a new release yet so you'll have to use the nightly build, but I found it relatively easy in Ubuntu. Adrian Rosebrock has a great post on how to install OpenCV 3 from source for Ubuntu and for OSX。如果您遵循 Adrian 的指南并简单地省略了他签出 3.0.0 标签的步骤,您应该继续使用 master 并获取包含修复程序的最新版本。
我想在 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)
我的电脑也有同样的问题。 所以,我用 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
如果你在 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 也有同样的问题。这两个都修复了。
在..\opencv\modules\python\src2
中注释掉cv2.cpp中的第162行CV_Error(Error::StsAssert, "The data should normally be NULL!")
重新编译和 SIFT 应该可以正常工作。
A fix has been merged into the master branch of OpenCV, and I've confirmed that it works. Unfortunately there hasn't been a new release yet so you'll have to use the nightly build, but I found it relatively easy in Ubuntu. Adrian Rosebrock has a great post on how to install OpenCV 3 from source for Ubuntu and for OSX。如果您遵循 Adrian 的指南并简单地省略了他签出 3.0.0 标签的步骤,您应该继续使用 master 并获取包含修复程序的最新版本。