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); 
}