00001
00005 #ifndef FCDYNAMIC_H_
00006 #define FCDYNAMIC_H_
00007
00008
00009 #include <windows.h>
00010 #include <stdio.h>
00011 #include <time.h>
00012 #include <conio.h>
00013 #include <errno.h>
00014
00015 #include "cv.h"
00016 #include "cxcore.h"
00017 #include "highgui.h"
00018
00019 #include "fgrab_struct.h"
00020 #include "fgrab_prototyp.h"
00021 #include "fgrab_define.h"
00022 #include "FastConfig.h"
00023
00024
00031 #define ONLINE 0
00032
00033 #define MIN_SEQ_LEN 2
00034
00035 #define ANIMATION_LENGTH 32
00036 #define ANIMATION_NAME "cross/Slide"
00037
00038 #define WHITE 255
00039 #define GRAY 128
00040 #define BLACK 0
00041 #define BACKGROUND BLACK
00042 #define FOREGROUND WHITE
00043 #define BORDER GRAY
00044
00045 #define OBJECT_FOUND 0
00046
00047 #define TIMEOUT 5
00048 #define DO_INIT 1
00049 #define MAX_ROI 8
00050
00057 enum roi_index {ROI_0 = 0, ROI_1, ROI_2, ROI_3, ROI_4, ROI_5, ROI_6, ROI_7};
00058
00059
00067 #define PIXEL(win, i, j) ((win)->img[(j) + ((i) * (win)->roi_w)])
00068
00069
00070
00091 struct tracking_window {
00092 int roi;
00093 int roi_xoff;
00094 int roi_yoff;
00095 int roi_w;
00096 int roi_h;
00098 int blob_xmin;
00099 int blob_ymin;
00100 int blob_xmax;
00101 int blob_ymax;
00103 int img_w;
00104 int img_h;
00105 unsigned char *img;
00106 };
00107
00114 typedef struct tracking_window TrackingWindow;
00115
00129 struct tracking_sequence {
00130 int *seq;
00131 int seq_len;
00132
00133 TrackingWindow windows[MAX_ROI];
00134 };
00135
00142 typedef struct tracking_sequence TrackingSequence;
00143
00159 struct frame_info {
00160 int img;
00161 int blob_found;
00162 TrackingWindow win;
00163 LARGE_INTEGER grab_start;
00164 LARGE_INTEGER grab_stop;
00165 LARGE_INTEGER thresh_start;
00166 LARGE_INTEGER thresh_stop;
00167 LARGE_INTEGER blob_start;
00168 LARGE_INTEGER blob_stop;
00169 LARGE_INTEGER pc_ts;
00170 __int64 fg_ts;
00171 };
00172
00173 typedef struct frame_info FrameInfo;
00174
00187 struct timing_info {
00188 int num_imgs;
00189 double roi_f;
00190 double roi_e;
00191 int roi_w;
00192 int roi_h;
00193
00194 LARGE_INTEGER loop_start;
00195 LARGE_INTEGER loop_stop;
00196 LARGE_INTEGER freq;
00197
00198 FrameInfo *frame;
00199 };
00200
00201 typedef struct timing_info TimingInfo;
00202
00203
00204 extern int init_cam(Fg_Struct **grabber, int memsize, int buffers, int camlink);
00205 extern int acquire_imgs(Fg_Struct *fg, int *sequence, int seq_len);
00206 extern int deinit_cam(Fg_Struct *fg);
00207 extern const unsigned long *get_mem();
00208
00209 extern int roi_sequence(Fg_Struct *fg, int *seq, int len);
00210 extern int set_roi(int index, int width, int height, int exposure, int frame);
00211 extern int roi_window(int index, int x, int width, int y, int height);
00212 extern int roi_exposure(int index, double exp, double ft);
00213 extern int roi_linlog(int index, int use_linglog, int ll1, int ll2, int comp);
00214 extern int write_roi(Fg_Struct *fg, int index, int imgNr, int doInit);
00215
00216 extern int threshold(TrackingWindow *win, int t);
00217 extern int boundary(TrackingWindow *win);
00218 extern int erode(TrackingWindow *win);
00219
00220 extern int time_run(TrackingSequence *tseq, int num_imgs, int t, double frame, double exposure);
00221 extern int display_run(TrackingSequence *tseq, double frame, double exposure);
00222
00223 extern void set_roi_box(TrackingWindow *win, int x, int y);
00224 extern void fix_blob_bounds(TrackingWindow *win);
00225 extern void set_region(int e, int x, int y, int flags, void *param);
00226 extern int position(TrackingWindow *cur);
00227 extern int blob(TrackingWindow *win);
00228
00229 extern int open_comm();
00230 extern int write_comm(TrackingWindow *win, int box_x, int box_y);
00231 extern int close_comm();
00232
00233 extern int StartGrabbing(Fg_Struct **fg, TrackingSequence *tseq, unsigned char **data);
00234 extern void CopyTrackingWindowToImage(TrackingWindow *win, IplImage *img);
00235 extern void CopyImageToTrackingWindow(TrackingWindow *win, IplImage *img);
00236 extern void PrintTimingData(Fg_Struct *fg, TimingInfo *timing_info);
00237 extern void GetNextImage(IplImage **img, int nr, char *name, int seq_len, int show_name);
00238 extern int SetTrackCamParameters(TrackingWindow *win, double frame, double exposure);
00239
00240 #endif