#include "cv.h"
#include "highgui.h"
#include <iostream>
#include <iomanip>
using namespace std;
// Load the source image. HighGUI use.
IplImage *image = 0, *gray = 0, *out=0;
CvMat source, destination, homograghy;
int main( int argc, char** argv )
{
char* filename = argc == 2 ? argv[1] : (char*)"warpin.bmp";
if( (image = cvLoadImage(filename, 1)) == 0 )
return -1;
gray = cvCreateImage(cvSize(image->width,image->height), IPL_DEPTH_8U, 1);
out = cvCreateImage(cvSize(image->width,image->height), IPL_DEPTH_8U, 1);
cvCvtColor(image, gray, CV_BGR2GRAY);
double a[] = {75, 169, 118, 165, 62, 222, 148, 216};
double b[] = {103, 19, 192, 19, 105, 205, 192, 205};
double c[9];
//create and initialize source and destionation points matrics
source = cvMat(4, 2, CV_64FC1, a);
destination = cvMat( 4, 2, CV_64FC1, b);
//create homograghy matrix
homograghy = cvMat( 3, 3, CV_64FC1, c);
//calculate homograghy matrix
cvFindHomography(&source, &destination, &homograghy);
//output homograghy matrix
cout<<"The homograghy matrix is:"<<endl;
//cout<<setiosflags(ios::fixed)<<setiosflags(ios::left);
for ( int i = 0; i < 3; i++ ) {
for ( int j = 0; j < 3; j++ ) {
cout <<setw(12)<<cvmGet(&homograghy, i, j);
}
cout<<endl;
}
//calculate warpout image
cvWarpPerspective(gray, out, &homograghy);
// Create windows.
cvNamedWindow("Source", 1);
cvNamedWindow("Result", 1);
// Show the images.
cvShowImage("Source", image);
cvShowImage("Result", out);
// Wait for a key stroke
cvWaitKey(0);
cvReleaseImage(&image);
cvReleaseImage(&gray);
cvReleaseImage(&out);
cvDestroyWindow("Source");
cvDestroyWindow("Result");
return 0;
}