aboutsummaryrefslogtreecommitdiff
path: root/pix_opencv_lk.h
blob: f60fa63f0cea505fe1ff674076b0d97c58483c11 (plain)
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