1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
|
#!/usr/bin/python
"""
Demo Good Feature avec Harris
"""
import Tkinter
import tkFileDialog
import sys,os,gc
from opencv.cv import *
from opencv.highgui import *
storage = cvCreateMemStorage(0)
#gc.enable( )
#buf=cvAlloc(40000)
# Global Variables
points=None;
src_image=None;
eigImage=None;
tempImage=None;
k = 25
qualityLevel=1
def update_k( val ):
cvClearMemStorage( storage );
global k # global tag is required, or we get UnboundLocalError
k = float(val/100.)
GoodFeature(img)
print "k: ",k
def update_quality( val ):
cvClearMemStorage( storage );
global qualityLevel # global tag is required, or we get UnboundLocalError
qualityLevel = float(val/100.)
if qualityLevel==0:
qualityLevel=0.01
GoodFeature(img)
print "Quality: ",qualityLevel
def GoodFeature(img):
gc.collect()
#buf=cvAlloc(4000)
#conversion en image 8bit (meme si elle l'est deja)
src_image=cvCreateImage(cvSize(img.width,img.height),IPL_DEPTH_8U,1);
cvCvtColor( img,src_image,CV_BGR2GRAY );
win_size = 5
eigImage = cvCreateImage (cvGetSize (src_image), 32, 1)
tempImage = cvCreateImage (cvGetSize (src_image), 32, 1)
minDistance=src_image.width/50
cornerCount=100
points = [[], []]
#fonction principale
points [1] = cvGoodFeaturesToTrack (src_image, eigImage, tempImage,cornerCount,qualityLevel, minDistance, None, 5, 1, k)
#detection subpixelle
cvFindCornerSubPix (src_image,points [1],cvSize (win_size, win_size), cvSize (-1, -1),cvTermCriteria (CV_TERMCRIT_ITER | CV_TERMCRIT_EPS,20, 0.03))
#affichage des points trouves en surrimpression
for the_point in points [1]:
cvCircle (src_image,[the_point.x, the_point.y],3, cvScalar (0, 255, 255, 0),-1, 8, 0)
cvShowImage( "Harris Corner Detector", src_image );
cvReleaseImage(src_image);
cvReleaseImage(eigImage);
cvReleaseImage(tempImage);
#points=None;
#src_image= None;
#eigImage=None;
#tempImage=None;
#cvFree_(buf)
del gc.garbage[:]
if __name__ == '__main__':
#gc.collect()
cvNamedWindow( "Harris Corner Detector", 1 );
filename=tkFileDialog.askopenfilename(filetypes = [("All", "*"),("Fichiers image","*.jpg;*.bmp")])
img = cvLoadImage( filename, 1 );
#Création des glissières
cvCreateTrackbar("Coef K", "Harris Corner Detector", k, 25, update_k);
cvCreateTrackbar("Quality", "Harris Corner Detector", qualityLevel, 100, update_quality);
GoodFeature(img);
del gc.garbage[:]
cvWaitKey(0);
cvDestroyWindow("Harris Corner Detector"); |
Partager