Got cvHoughTransform Working
[EconoBoard.git] / src / main / test.c
blobd8940a22c5da18f2808f62968b5a88356e0fbdcd
1 #include <stdlib.h>
2 #include <stdio.h>
3 #include <argp.h>
4 #include <math.h>
5 #include <cv.h>
6 #include <highgui.h>
7 #include <string.h>
9 #define ERROR_FATAL(x) { fprintf(stderr, "%s:%d\t%s\n", __FILE__, __LINE__, x); exit(1); }
11 const char *argp_program_version = "main git release";
12 const char *argp_program_bug_address = "<blacklocist@gmail.com>";
14 static char doc[] = "Runs the board interpreter with the specified "
15 "video device (0 by default).";
17 static char args_doc[] = ""; // no args required
19 static struct argp_option options[] = {
20 {"videoid", 'v', "ID", 0, "Use video device identified by integer ID"},
21 {"device", 'd', "DEV", 0, "Use video device DEV"},
22 { 0 }
25 struct arguments
27 int videoid;
28 char *device;
31 static error_t parse_opt(int key, char *arg, struct argp_state *state)
33 struct arguments *arguments = state->input;
35 switch(key)
37 case 'v':
38 arguments->videoid = atoi(arg);
39 break;
40 case 'd':
41 arguments->device = arg;
42 break;
43 case ARGP_KEY_ARG:
44 if (state->arg_num > 0) // too many arguments
45 argp_usage(state);
46 break;
47 case ARGP_KEY_END:
48 // do nothing, we need no arguments
49 break;
50 default:
51 return ARGP_ERR_UNKNOWN;
54 return 0;
57 static struct argp argp = { options, parse_opt, args_doc, doc };
59 int main(int argc, char **argv)
61 struct arguments args;
63 // defaults
64 args.videoid = 0;
65 args.device = 0;
67 argp_parse(&argp, argc, argv, 0, 0, &args);
69 cvNamedWindow("win1", 1);
70 cvNamedWindow("win2", 1);
72 CvCapture* capture;
74 if (!args.device) {
75 capture = cvCaptureFromCAM(args.videoid);
76 printf("Opening camera %d...\n", args.videoid);
78 else {
79 capture = cvCaptureFromFile(args.device);
80 printf("Opening camera device %s...\n", args.device);
83 cvMoveWindow("win1",100,100);
84 cvMoveWindow("win2", 400,100);
86 double maxval = 256;
87 double speed = 2;
89 IplImage *frame, *src, *dest;
92 if (!capture)
93 ERROR_FATAL("Could not open camera for capturing");
96 if (!cvGrabFrame(capture))
97 ERROR_FATAL("Could not capture frame from camera");
99 frame = cvRetrieveFrame(capture);
101 src = cvCreateImage(cvSize(frame->width,frame->height),IPL_DEPTH_8U,1);
102 dest = cvCreateImage(cvSize(frame->width,frame->height),IPL_DEPTH_8U,1);
105 while(1)
107 switch(cvWaitKey(10))
109 case '[':
110 maxval += speed;
112 printf("%f\n",maxval);
113 break;
114 case ']':
115 maxval -= speed;
116 printf("%f\n",maxval);
117 break;
118 case 27:
119 return 0;
123 if (!cvGrabFrame(capture))
124 ERROR_FATAL("Could not capture frame from camera");
126 frame = cvRetrieveFrame(capture);
128 cvConvertImage(frame,src,0);
130 cvAdaptiveThreshold(src,dest,maxval,CV_ADAPTIVE_THRESH_MEAN_C,CV_THRESH_BINARY,3,5);
132 cvShowImage("win1", frame);
133 cvShowImage("win2", dest);
137 cvReleaseImage(&src);
138 cvReleaseImage(&dest);
140 cvReleaseCapture(&capture);
142 cvDestroyWindow("win1");
144 return 0;