首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenCV3.0 -模块没有SIFT属性

OpenCV3.0 -模块没有SIFT属性
EN

Stack Overflow用户
提问于 2014-09-09 10:16:38
回答 6查看 22.7K关注 0票数 9

我使用的是Ubuntu 12.04。我最近从https://github.com/Itseez/opencv/archive/3.0.0-alpha.zip安装了OpenCV 3.0。我想要进行特征匹配,为此我使用了以下代码:

代码语言:javascript
复制
import numpy as np
import cv2
from matplotlib import pyplot as plt

MIN_MATCH_COUNT = 10

img1 = cv2.imread('box.png',0)          # queryImage
img2 = cv2.imread('box_in_scene.png',0) # trainImage

# Initiate SIFT detector
sift = cv2.SIFT()

# find the keypoints and descriptors with SIFT
kp1, des1 = sift.detectAndCompute(img1,None)
kp2, des2 = sift.detectAndCompute(img2,None)

FLANN_INDEX_KDTREE = 0
index_params = dict(algorithm = FLANN_INDEX_KDTREE, trees = 5)
search_params = dict(checks = 50)

flann = cv2.FlannBasedMatcher(index_params, search_params)

matches = flann.knnMatch(des1,des2,k=2)

# store all the good matches as per Lowe's ratio test.
good = []
for m,n in matches:
    if m.distance < 0.7*n.distance:
        good.append(m)

if len(good)>MIN_MATCH_COUNT:
    src_pts = np.float32([ kp1[m.queryIdx].pt for m in good ]).reshape(-1,1,2)
    dst_pts = np.float32([ kp2[m.trainIdx].pt for m in good ]).reshape(-1,1,2)

    M, mask = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC,5.0)
    matchesMask = mask.ravel().tolist()

    h,w = img1.shape
    pts = np.float32([ [0,0],[0,h-1],[w-1,h-1],[w-1,0] ]).reshape(-1,1,2)
    dst = cv2.perspectiveTransform(pts,M)

    img2 = cv2.polylines(img2,[np.int32(dst)],True,255,3, cv2.CV_AA)

else:
    print "Not enough matches are found - %d/%d" % (len(good),MIN_MATCH_COUNT)
    matchesMask = None

draw_params = dict(matchColor = (0,255,0), # draw matches in green color
                   singlePointColor = None,
                   matchesMask = matchesMask, # draw only inliers
                   flags = 2)

img3 = cv2.drawMatches(img1,kp1,img2,kp2,good,None,**draw_params)

plt.imshow(img3, 'gray'),plt.show()

我得到以下错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "feature_matching.py", line 11, in <module>
    sift = cv2.SIFT()
AttributeError: 'module' object has no attribute 'SIFT'

为什么SIFT在OpenCV 3.0中不可用?如何将SIFT添加到OpenCV 3.0?任何帮助都将不胜感激。谢谢你。

PS。我尝试包含来自https://github.com/Itseez/opencv_contrib的模块

代码语言:javascript
复制
$ cd <opencv_build_directory>
$ cmake -DOPENCV_EXTRA_MODULES_PATH=<opencv_contrib>/modules <opencv_source_directory>
$ make -j5
$ make install
EN

回答 6

Stack Overflow用户

发布于 2014-09-09 13:22:40

  • 是的,您需要构建opencv_extra模块(特别是xfeatures2d).
  • don't忘记在cmake/make步骤之后运行make install (您的新python模块必须复制到python 3.0it:cv2.xfeatures2d.SIFT (注意额外的名称空间)
票数 6
EN

Stack Overflow用户

发布于 2015-01-13 06:38:12

另一种可能性(也是我发现的最简单的一种!)是安装2.4.9版本,它已经包含SIFT和SURF算法。你要做的就是

代码语言:javascript
复制
import cv2
sift = cv2.SIFT()
(...)
票数 0
EN

Stack Overflow用户

发布于 2015-10-19 17:35:59

由于SIFT和SIRF由它们的创建者申请专利,这些描述符被移到opencv_contrib包中。为了使用它,你需要下载并安装两个包: original和contrib。

代码语言:javascript
复制
cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D INSTALL_C_EXAMPLES=ON \
    -D INSTALL_PYTHON_EXAMPLES=ON \
    -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
    -D BUILD_EXAMPLES=ON ..

更多信息http://www.pyimagesearch.com/2015/07/16/where-did-sift-and-surf-go-in-opencv-3/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25735818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档