www.pudn.com > TestSnake.rar > TestSnake.cpp
#include#include #include #include void main() { IplImage* InputImg = NULL; CvSize winni; CvPoint* points; CvPoint* points1; CvPoint* points2; CvTermCriteria criteria; FILE *fp; float* alpha; float* beta; float* gamma; char Infilename[100], Outfilename[100], InSnakeCoords[100]; int length, x = 1, y = 1, calcGradient = 1, i; printf("Input filename ? -> "); scanf("%s", &Infilename); printf("Output filename ? -> "); scanf("%s", &Outfilename); printf("Input Snake Coordinates filename ? -> "); scanf("%s", &InSnakeCoords); InputImg = cvLoadImage(Infilename, -1); if (!InputImg) { printf("Could not load Input Image"); exit(0); } winni.width = 1; winni.height = 1; alpha = (float*)malloc(sizeof(float)); beta = (float*)malloc(sizeof(float)); gamma = (float*)malloc(sizeof(float)); *alpha = 1.0; *beta = 0.0; *gamma = 3.0; fp = fopen(InSnakeCoords, "r"); fscanf(fp, "%d", &(length)); printf("length = %d \n", length); points = (CvPoint*)malloc(length*sizeof(CvPoint*)); points1 = (CvPoint*)malloc(length*sizeof(CvPoint*)); points2 = (CvPoint*)malloc(length*sizeof(CvPoint*)); i = 1; while(i <= length) { fscanf(fp, "%d", &(points[i].x)); fscanf(fp, "%d", &(points[i].y)); printf("%d %d \n",points[i].x, points[i].y); i++; } cvWaitKey(0); //criteria.type = 1; criteria.max_iter = 1000; /* for (i = 1; i < length; i++) { points1[i].x = points[i].x; points1[i].y = points[i].y; points2[i].x = points[i+1].x; points2[i].y = points[i+1].y; cvLine(InputImg, points1[i], points2[i], 0, 1, 1); }*/ cvSnakeImage(InputImg, points, length, alpha, beta, gamma, CV_VALUE, winni, criteria, calcGradient); printf("\n\t%d\n", length); for (i = 1; i < length; i++) { CvScalar s=cvScalar(155); s.val[0]=10; points1[i].x = points[i].x; points1[i].y = points[i].y; points2[i].x = points[i+1].x; points2[i].y = points[i+1].y; cvLine(InputImg, points1[i], points2[i], s, 1,8, 0); printf("x-> %d y-> %d \n",points[i].x, points[i].y); } cvSaveImage(Outfilename, InputImg); cvReleaseImage(&InputImg); free(alpha); free(beta); free(gamma); free(points); fclose(fp); }