2014-02-09 13 views
5

Ich versuche, die einfachste opencv SIFT Code durch die Schale von Ubuntu, ohne GlückSIFT() in opencv nicht funktioniert

Ich erhalte eine Fehlermeldung auszuführen:

AttributeError: 'module' object has no attribute 'SURF'

Der Code:

import cv2 
cv2.SIFT() 

Meine Konfigurationen:

  • Ubuntu-Version ist 13.10 64bit
  • "cv2. Version "ist 2.4.5
  • die Ausgabe von dir (cv2) ist (für den S Brief nur)

    'scaleAdd', 'segmentMotion', 'sepFilter2D', 'setIdentity', 'setMouseCallback', 'setTrackbarPos', 'setUseOptimized', 'setWindowProperty', 'solve', 'solveCubic', 'solvePnP', 'solvePnPRansac', 'solvePoly', 'sort', 'sortIdx', 'split', 'sqrt', 'startWindowThread', 'stereoCalibrate', 'stereoRectify', 'stereoRectifyUncalibrated', 'subtract', 'sumElems'

+1

SIFT und SURF sind nonfree, patentierte Algos. Einige Paketmanager (zB Debian) geben Ihnen ein cv2-Modul, das sie nicht enthält. – berak

+0

Ich habe zusätzliche Konfiguration - Windows 7 mit Python 2.7 und opencv 2.4.6, in denen ich SIFT() sowohl mit Terminal als auch mit pyDev aufrufen kann ... welche lib hat es bei dieser Konfiguration funktioniert? –

+1

die lib wäre opencv_nonfree, aber die vorgefertigte cv2.pyd on win ist wahrscheinlich statisch verknüpft (also ist es bereits enthalten) wieder, wenn sie es auf linux benötigen, holen sie sich die quelle, kompilieren sie ihre eigenen, und sie sind fertig. – berak

Antwort

2

nicht die glatte Art und Weise, es zu tun, aber es funktionierte für mich.

@Berak mir erklärt, wie Sie kann beobachten in die Kommentare zu meiner Frage, dass sowohl der SIFT-Algorithmus als auch der FAST-Algorithmus patentiert sind, was bedeutet, dass sie nicht Teil der regulären opencv-Installation sind.

Deshalb suchte ich nach einer Python-Distribution, die alles haben wird - und ich fand eine. Also, habe ich nicht wirklich das Problem gelöst, wie @Berak vorgeschlagen, alternativ umgangen ich es Python(x,y)

Vielen Dank für die Hilfe bei der Verwendung,

Ozrad

+0

"nicht Teil der regulären opencv Installation." - Es gibt keine reguläre * binäre * Verteilung. es ist in der src enthalten, und Betreuer von PCAs entscheiden, ob sie es packen oder nicht. – berak

1

Ich hatte auch Probleme Sift in Verwendung, weil ich nur OpenCV hatte. Aber nach ROS Hydro installieren, bin ich in der Lage SIFT/SURF zu verwenden, wie sie unter unfreien Teil kommen.

0

Ich folgte die OpenCV Python Windows-Installation guide. Ich versuchte cv2.SIFT zu verwenden und stellte fest, dass es in dieser Installation nicht verfügbar war.

Nach vollständig removing Python 2.7 und openCV, habe ich dann Python (x, y) installiert und openCV enthalten. Ich bekomme
cv2. Version
'2.4.8'

Und: cv2.SIFT -> cv2.SURF

So Python (x, y) enthält SIFT, SURF-Module.

+0

lassen Sie mich klären: Python ist nicht das Problem hier, die Frage ist, ob das nicht-freie Modul in Ihrem * cv2.pyd * kompiliert wurde oder nicht. – berak

2

Ein einfacher Code, den ich für SIFT

import cv2 
import numpy as np 

img = cv2.imread('home.jpg') 
gray= cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 

sift = cv2.SIFT() 
kp = sift.detect(gray,None) 

img=cv2.drawKeypoints(gray,kp) 

cv2.imwrite('sift_keypoints.jpg',img) 

Und ich getestet, um den Code gefunden, es funktioniert

1

Das bin ich verrückt fuhr aber kratzen alle anderen Vorschläge, stellt sich heraus, Sie jetzt SIFT bekommen können und SURF mit nur zwei Terminalbefehlen!

  1. Vergewissern Sie sich, dass es auf Ihrem Computer keine anderen opencv gibt ...

    pip uninstall opencv-python 
    
  2. erhalten dann die Version beitragen (hat SIFT und SURF + andere) ...

    pip install opencv-contrib-python 
    

Es installieren sollte aber beachten Sie, dass die Namen ein wenig anders sind.

import cv2 
sift = cv2.xfeatures2d.SIFT_create() 

!!! Pip Pip Hurray !!! (das ist nur ein Wortspiel, nicht Teil des Codes)

Verwandte Themen