1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
/*-----------------------------------------------------------------
LOG
GEM - Graphics Environment for Multimedia
LK point detection and tracking
Copyright (c) 1997-1999 Mark Danks. mark@danks.org
Copyright (c) Günther Geiger. geiger@epy.co.at
Copyright (c) 2001-2002 IOhannes m zmoelnig. forum::für::umläute. IEM. zmoelnig@iem.kug.ac.at
Copyright (c) 2002 James Tittle & Chris Clepper
For information on usage and redistribution, and for a DISCLAIMER OF ALL
WARRANTIES, see the file, "GEM.LICENSE.TERMS" in this distribution.
-----------------------------------------------------------------*/
#ifndef INCLUDE_PIX_OPENCV_LK_H_
#define INCLUDE_PIX_OPENCV_LK_H_
#include "Base/GemPixObj.h"
#ifndef _EiC
#include "cv.h"
#endif
#define MAX_MARKERS 500
const int MAX_COUNT = 500;
/*-----------------------------------------------------------------
-------------------------------------------------------------------
CLASS
pix_opencv_lk
LK point detection and tracking
KEYWORDS
pix
DESCRIPTION
-----------------------------------------------------------------*/
class GEM_EXTERN pix_opencv_lk : public GemPixObj
{
CPPEXTERN_HEADER(pix_opencv_lk, GemPixObj)
public:
//////////
// Constructor
pix_opencv_lk();
protected:
//////////
// Destructor
virtual ~pix_opencv_lk();
//////////
// Do the processing
virtual void processRGBAImage(imageStruct &image);
virtual void processRGBImage(imageStruct &image);
virtual void processYUVImage(imageStruct &image);
virtual void processGrayImage(imageStruct &image);
void winSizeMess(float winsize);
void nightModeMess(float nightmode);
void qualityMess(float quality);
void initMess(void);
void markMess(int, t_atom*);
void deleteMess(float index);
void clearMess(void);
void minDistanceMess(float mindistance);
void maxMoveMess(float maxmove);
void ftoleranceMess(float ftolerance);
void delaunayMess(t_symbol *s);
void pdelaunayMess(float fpoint, float fthreshold);
int comp_xsize;
int comp_ysize;
t_outlet *m_dataout;
t_atom x_list[3];
int win_size;
double quality;
int min_distance;
int night_mode;
int maxmove;
int markall;
int ftolerance;
int delaunay;
int threshold;
private:
//////////
// Static member functions
static void winSizeMessCallback(void *data, t_floatarg winsize);
static void nightModeMessCallback(void *data, t_floatarg nightmode);
static void qualityMessCallback(void *data, t_floatarg quality);
static void initMessCallback(void *data);
static void markMessCallback(void *data, t_symbol* name, int argc, t_atom* argv);
static void deleteMessCallback(void *data, t_floatarg index);
static void clearMessCallback(void *data);
static void minDistanceMessCallback(void *data, t_floatarg mindistance);
static void maxMoveMessCallback(void *data, t_floatarg maxmove);
static void ftoleranceMessCallback(void *data, t_floatarg ftolerance);
static void delaunayMessCallback(void *data, t_symbol *s);
static void pdelaunayMessCallback(void *data, t_floatarg fpoint, t_floatarg fthreshold);
// Internal Open CV data
IplImage *rgba, *rgb, *orgb, *gray, *ogray, *prev_gray, *pyramid, *prev_pyramid, *swap_temp;
int x_xmark[MAX_MARKERS];
int x_ymark[MAX_MARKERS];
int x_found[MAX_MARKERS];
CvPoint2D32f* points[2], *swap_points;
char* status;
int count;
int need_to_init;
int flags;
int add_remove_pt;
CvPoint pt;
CvFont font;
// structures needed for the delaunay
CvRect x_fullrect;
CvMemStorage* x_storage;
CvSubdiv2D* x_subdiv;
};
#endif // for header file
|