OpenCV3.0 - module n'a pas d'attribut EIPD
J'utilise Ubuntu 12.04. J'ai récemment installé OpenCV 3.0 à partir de https://github.com/Itseez/opencv/archive/3.0.0-alpha.zip. Je veux faire fonction de correspondant pour lequel j'ai utilisé le code suivant:
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()
J'obtiens l'erreur suivante:
Traceback (most recent call last):
File "feature_matching.py", line 11, in <module>
sift = cv2.SIFT()
AttributeError: 'module' object has no attribute 'SIFT'
Pourquoi est-TAMISER pas disponible dans OpenCV 3.0? Comment puis-je ajouter de la TAMISER pour OpenCV 3.0? Toute aide serait appréciée. Merci.
PS. J'ai essayé y compris les modules de https://github.com/Itseez/opencv_contrib
$ cd <opencv_build_directory>
$ cmake -DOPENCV_EXTRA_MODULES_PATH=<opencv_contrib>/modules <opencv_source_directory>
$ make -j5
$ make install
enfin, je l'utilise opencv3.2.0 + opencv_contrib, il fonctionne. ^)^
OriginalL'auteur Clive | 2014-09-09
Vous devez vous connecter pour publier un commentaire.
oui, vous avez besoin pour construire le opencv_extra modules (esp. xfeatures2d).
n'oubliez pas d'exécuter
make install
après le cmake/faire de l'étape (votre nouveau module python doit être copiés au cours de python/lib/sitelibs)dans la 3.0, c'est :
cv2.xfeatures2d.SIFT
(note des nouveaux noms)J'ai oublié de lancer make install la dernière fois. Je n'ai donc cette fois, mais toujours voir la même erreur. Aussi essayé de changer cv2.TAMISER() pour cv2.xfeatures2d.TAMISER() et même message d'erreur apparaît à nouveau. Module objet n'a pas d'attribut xfeatures2d.
vous pouvez faire
help(cv2)
à voir, ce dans cv2.pyd cette fois. si xfeatures2d est manquant, il doit y avoir eu des erreurs de génération ? il y avait des problèmes avec le cudaarithm de dépendance. si vous construisez sans cuda, vous devez le supprimer de la dépendanceJ'ai fait de l'aide(cv2) et ne voit pas xfeatures2d dans des Fonctions. Je ne vois Feature2d_create(...) . Je ne vois pas les erreurs de compilation lors de la construction de opencv_contrib. Ce que je fais mal? Par la manière, ce qui est cv2.pyd?
ok. Feature2d_create(...) est de la "normale" opencv features2d module(qui ne comprennent sift,surf,bref et étoiles). permettez-moi de voir, si elle s'appuie pour moi aujourd'hui..
OriginalL'auteur berak
Une autre possibilité (et le plus facile je trouve!!!) est d'installer la version 2.4.9 qui comprennent déjà SIFT et SURF de l'algorithme.
Vous avez juste à faire alors
OriginalL'auteur Jprog
En raison de TAMISER et de SIRF sont déposées par leurs créateurs, ces descripteurs ont été déplacés à opencv_contrib paquet. Pour l'utiliser, vous devez télécharger et installer les deux paquets: original et contrib.
plus d'informations http://www.pyimagesearch.com/2015/07/16/where-did-sift-and-surf-go-in-opencv-3/
OriginalL'auteur angubenko
Il y a une source pip qui rend cela très facile.
Si vous avez une autre version d'opencv-python installé, utilisez cette commande pour le supprimer pour éviter les conflits:
pip désinstaller opencv-python
Ensuite, installez la contrib version:
pip installer opencv-contrib-python
TAMISER utilisation:
importation cv2
tamiser = cv2.xfeatures2d.SIFT_create()
source:Ne pouvez pas utiliser de SURF, TAMISER dans OpenCV
OriginalL'auteur majid lesani