cvGoodFeaturesToTrack,http://blog.csdn.net/moc062066/article/details/6634120,和
cvFindCornerSubPix ,http://blog.csdn.net/moc062066/article/details/6634961
// 金字塔Lucas-Kanade.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <cv.h>
#include <highgui.h>
#include <cxcore.h>
const int MAX_CORNERS = 500;
int _tmain(int argc, _TCHAR* argv[])
{
IplImage* imgA = cvLoadImage("D:\\Project\\图片的缩放\\金字塔Lucas-Kanade\\706.jpg",0);
IplImage* imgB = cvLoadImage("D:\\Project\\图片的缩放\\金字塔Lucas-Kanade\\712.jpg",0);
CvSize img_sz=cvGetSize(imgA);
int win_size=10;
IplImage* imgC=cvLoadImage("D:\\Project\\图片的缩放\\金字塔Lucas-Kanade\\709.jpg");
IplImage* eig_image = cvCreateImage(img_sz,IPL_DEPTH_32F,1);
IplImage* tmp_image = cvCreateImage(img_sz,IPL_DEPTH_32F,1);
int corner_count =MAX_CORNERS;
CvPoint2D32f* cornersA = new CvPoint2D32f[MAX_CORNERS];
cvGoodFeaturesToTrack(imgA,eig_image,tmp_image,cornersA,&corner_count,0.01,5.0,0,3,0,0.04);
cvFindCornerSubPix(imgA,cornersA,corner_count,cvSize(win_size,win_size),cvSize(-1,-1),
cvTermCriteria(CV_TERMCRIT_ITER|CV_TERMCRIT_EPS,20,0.03));
char features_found[MAX_CORNERS];
float features_errors[MAX_CORNERS];
CvSize pyr_sz = cvSize(imgA->width+8,imgB->height/3);
IplImage* pyrA = cvCreateImage(pyr_sz,IPL_DEPTH_32F,1);
IplImage* pyrB = cvCreateImage(pyr_sz,IPL_DEPTH_32F,1);
CvPoint2D32f* cornersB = new CvPoint2D32f[MAX_CORNERS];
cvCalcOpticalFlowPyrLK(imgA,imgB,pyrA,pyrB,cornersA,cornersB,
corner_count,cvSize(win_size,win_size),5,features_found,features_errors,
cvTermCriteria(CV_TERMCRIT_ITER|CV_TERMCRIT_EPS,20,0.03),0);
for (int i=0;i<corner_count;i++)
{
if (features_found[i]==0||features_found[i]>550)
{
printf("error is %f/n",features_errors[i]);
continue;
}
printf("Got it/n");
CvPoint p0=cvPoint(cvRound(cornersA[i].x),cvRound(cornersA[i].y));
CvPoint p1=cvPoint(cvRound(cornersB[i].x),cvRound(cornersB[i].y));
cvLine(imgC,p0,p1,CV_RGB(255,0,0),2);
}
cvNamedWindow("ImageA",0);
cvNamedWindow("ImageB",0);
cvNamedWindow("LKpyr_OpticalFlow",0);
cvShowImage("imageA",imgA);
cvShowImage("imageB",imgB);
cvShowImage("LKpyr_OpticalFlow",imgC);
cvWaitKey(0);
return 0;
}