我知道有很多关于 Python 和 OpenCV 的问题,但我没有找到关于这个特殊主题的帮助。
我想从python OpenCV中的图像中提取 SIFT关键点。
我最近安装了OpenCV 2.3,可以访问SURF和MSER,但不能访问SIFT。
我在python模块(cv和cv2)中看不到与SIFT相关的任何内容(我有点撒谎:有2个常量:cv2.SIFT_COMMON_PARAMS_AVERAGE_ANGLE
和cv2.SIFT_COMMON_PARAMS_FIRST_ANGLE
)。
这让我困惑了一段时间。 这是否与OpenCV的某些部分在C中和C ++中的其他部分相关? 有什么想法吗?
P.S。:我也试过pyopencv(OpenCV< = 2.1的另一个python绑定)但没有成功。
答案 0 :(得分:1)
您确定允许OpenCV支持SIFT吗? SIFT是一种专有功能类型,由不列颠哥伦比亚大学和美国的算法发明者David Lowe在美国获得专利。在我自己的研究中,我不得不多次重写这个算法。事实上,一些视觉研究人员试图避免SIFT并使用其他规模不变的模型,因为SIFT是专有的。
答案 1 :(得分:0)
您可以使用OpenCV python绑定计算SIFT功能,如下所示:
import cv2
sift = cv2.SIFT()
keypoints, descriptors = sift.detectAndCompute(imgray,None)
答案 2 :(得分:0)
SIFT已patented,并且并非免费用于商业用途。
但是,如果您想将其用于教育目的,这很简单:
pip install opencv-python opencv-contrib-python
然后您可以
import cv2
# Initiate SIFT detector
sift = cv2.xfeatures2d.SIFT_create()
# find the keypoints and descriptors with SIFT
kp1, des1 = sift.detectAndCompute(img, None)
答案 3 :(得分:-1)
在ubuntu上,您可以通过安装此版本的opencv-contrib进行修复
$entry = current(array_filter($array, function($e) use($v){ return $e->ID==$v; }));