Maison > Article > développement back-end > Introduction détaillée à l'exemple de reconnaissance d'images par la méthode SIFT du package Scipy en Python
scipy
Le package scipy contient diverses boîtes à outils dédiées aux problèmes courants du calcul scientifique. Ses différents sous-modules correspondent à différentes applications. Comme l'interpolation, l'intégration, l'optimisation, le traitement d'image, les fonctions spéciales, etc.
scipy peut être comparé à d'autres bibliothèques de calcul scientifique standards, telles que GSL (GNU C ou C Scientific Computing Library), ou la boîte à outils Matlab. scipy est le package de base des programmes de calcul scientifique en Python ; il est utilisé pour calculer efficacement les matrices numpy, permettant à numpy et scipy de travailler ensemble.
Avant d'implémenter un programme, il convient de vérifier si la méthode de traitement des données requise existe déjà dans scipy. En tant que programmeurs non professionnels, les scientifiques aiment toujours réinventer la roue, ce qui aboutit à un code plein de bugs, non optimisé et difficile à partager et à maintenir. En revanche, les programmes Scipy sont optimisés et testés et doivent donc être utilisés autant que possible.
Scipy est composé de quelques sous-modules avec des fonctions spécifiques. Ils dépendent tous de numpy, mais chacun est fondamentalement indépendant les uns des autres.
Donnez un exemple d'installation sous Debian Linux (même si j'utilise -- sur Windows) :
Copiez le code Le code est le suivant :
sudo apt-get install python-numpy python-scipy python-matplotlib ipython ipython-notebook python-pandas python-sympy python-nose
La manière standard d'importer Numpy et ces modules scipy est :
import numpy as np from scipy import stats # 其它子模块相同
L'espace de noms scipy principal contient principalement de vraies fonctions numpy (essayez scipy.cos qui est np.cos). Ce sont uniquement pour des raisons historiques, il n'y a généralement aucune raison d'utiliser import scipy dans votre code.
Utiliser l'algorithme SIFT de correspondance d'image pour la détection de LOGO
D'abord le rendu :
Parmi eux Il s'agit de la marque du logo,
Le code est le suivant.
#coding=utf-8 import cv2 import scipy as sp img1 = cv2.imread('x1.jpg',0) # queryImage img2 = cv2.imread('x2.jpg',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 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(des1,des2,k=2) print 'matches...',len(matches) # Apply ratio test good = [] for m,n in matches: if m.distance < 0.75*n.distance: good.append(m) print 'good',len(good) # ##################################### # visualization h1, w1 = img1.shape[:2] h2, w2 = img2.shape[:2] view = sp.zeros((max(h1, h2), w1 + w2, 3), sp.uint8) view[:h1, :w1, 0] = img1 view[:h2, w1:, 0] = img2 view[:, :, 1] = view[:, :, 0] view[:, :, 2] = view[:, :, 0] for m in good: # draw the keypoints # print m.queryIdx, m.trainIdx, m.distance color = tuple([sp.random.randint(0, 255) for _ in xrange(3)]) #print 'kp1,kp2',kp1,kp2 cv2.line(view, (int(kp1[m.queryIdx].pt[0]), int(kp1[m.queryIdx].pt[1])) , (int(kp2[m.trainIdx].pt[0] + w1), int(kp2[m.trainIdx].pt[1])), color) cv2.imshow("view", view) cv2.waitKey()
Plus de détails sur l'utilisation de la méthode SIFT du package Scipy pour la reconnaissance d'images en Python Pour des exemples d'articles connexes, veuillez faire attention au site Web PHP chinois !