Saturday, January 08, 2005

Example: FindGoodFeature

cvGoodFeaturesToTrack(...)

// feature.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "cv.h"
#include "highgui.h"

int _tmain(int argc, _TCHAR* argv[])
{
//First get two images from a AVI file.
/*
CvCapture* pCapture=cvCaptureFromAVI("836.avi");
cvSetCaptureProperty(pCapture,CV_CAP_PROP_POS_FRAMES,2);
IplImage *src1=cvCloneImage( cvQueryFrame(pCapture) );
cvSetCaptureProperty(pCapture,CV_CAP_PROP_POS_FRAMES,3);
IplImage *src2=cvCloneImage( cvQueryFrame(pCapture) );
*/

IplImage *src1 = cvLoadImage( "C:\\Data\\EarScan\\Ear_Images\\Hole\\cone0.bmp", 1);
IplImage *src2 = cvLoadImage( "C:\\Data\\EarScan\\Ear_Images\\Hole\\cone1.bmp", 1);

CvSize cvsize;
cvsize.width=src1->width;
cvsize.height=src1->height;

//Then convert the two images to 8-bit gray images
IplImage* Graysrc1=cvCreateImage(cvsize,IPL_DEPTH_8U,1);
cvCvtColor(src1,Graysrc1,CV_RGB2GRAY);

IplImage* Graysrc2=cvCreateImage(cvsize,IPL_DEPTH_8U,1);
cvCvtColor(src2,Graysrc2,CV_RGB2GRAY);

/*
IplImage* flowX=cvCreateImage(cvsize,IPL_DEPTH_32F,1);
IplImage* flowY=cvCreateImage(cvsize,IPL_DEPTH_32F,1);

cvsize.width=3;
cvsize.height=3;

//Then call the function to get optical flow images.

cvCalcOpticalFlowLK(Graysrc1,Graysrc2,cvsize,flowX,flowY);
cvConvertScaleAbs(flowX,Graysrc1,30,0);
cvConvertScaleAbs(flowY,Graysrc2,30,0);
*/
//Then flip the tow optical flow images
//cvFlip(Graysrc1,NULL,0);
//cvFlip(Graysrc2,NULL,0);

//Then display them using highgui
//srcImage is your working image in IplImage* format!

int cornerCount=30; //max number of corners
CvPoint2D32f corners[30];

//IplImage * grayImage = cvCreateImage(cvGetSize(Graysrc1), IPL_DEPTH_8U, 1);
IplImage * corners1= cvCreateImage(cvGetSize(Graysrc1), IPL_DEPTH_32F, 1);
IplImage * corners2= cvCreateImage(cvGetSize(Graysrc1),IPL_DEPTH_32F, 1);
cvGoodFeaturesToTrack (Graysrc1, corners1, corners2, corners,
&cornerCount, 0.15, 20,0);

double color=CV_RGB(255,0,0);
int thickness=3 ;
CvPoint center;
for(int i=0; i<cornerCount; i++)
{
center.x = (int) corners[i].x;
center.y = (int) corners[i].y;
cvCircle( src1, center, 5, color, thickness);
}

cvGoodFeaturesToTrack (Graysrc2, corners1, corners2, corners,
&cornerCount, 0.15, 20,0);
for(int i=0; i<cornerCount; i++)
{
center.x = (int) corners[i].x;
center.y = (int) corners[i].y;
cvCircle( src2, center, 5, color, thickness);
}

cvNamedWindow("a",CV_WINDOW_AUTOSIZE);
cvShowImage("a",src1);

cvNamedWindow("H",CV_WINDOW_AUTOSIZE);
cvShowImage("H",src2);
cvWaitKey(0);
//Last clean up.
cvDestroyWindow("H");
cvDestroyWindow("V");
//cvReleaseImage(&flowX);
//cvReleaseImage(&flowY);
cvReleaseImage(&Graysrc1);
cvReleaseImage(&Graysrc2);
cvReleaseImage(&src1);
cvReleaseImage(&src2);

//cvReleaseCapture(&pCapture);
return 0;
}

No comments:

Post a Comment