summaryrefslogtreecommitdiffstats
path: root/SD-VBS/common/toolbox/lagrcv/lk_flow.cc
diff options
context:
space:
mode:
Diffstat (limited to 'SD-VBS/common/toolbox/lagrcv/lk_flow.cc')
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/lk_flow.cc76
1 files changed, 76 insertions, 0 deletions
diff --git a/SD-VBS/common/toolbox/lagrcv/lk_flow.cc b/SD-VBS/common/toolbox/lagrcv/lk_flow.cc
new file mode 100755
index 0000000..c083048
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/lk_flow.cc
@@ -0,0 +1,76 @@
1
2/* compile with
3 lk_flow.cc -I/usr/local/opencv/include -L/usr/local/opencv/lib -lcxcore -lcv
4*/
5
6#include "mex.h"
7#include "opencv/cv.h"
8#include "opencv/highgui.h"
9#include <stdio.h>
10#include <math.h>
11
12void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
13 // usage: [ velx vely ] = lk_flow(image1,image2,winsize)
14 // images must be single-channel, 8-bit
15
16 const int *backwards_imdims = mxGetDimensions(prhs[0]);
17 int imdims[2] = { backwards_imdims[1], backwards_imdims[0] };
18 int winsize = (int)mxGetScalar(prhs[2]);
19 plhs[0] = mxCreateNumericArray(2, imdims, mxSINGLE_CLASS, mxREAL);
20 plhs[1] = mxCreateNumericArray(2, imdims, mxSINGLE_CLASS, mxREAL);
21
22 printf("imsize %d %d\n", imdims[0], imdims[1]);
23
24 IplImage *im1 =
25 cvCreateImageHeader(cvSize(imdims[0], imdims[1]), IPL_DEPTH_8U, 1);
26 IplImage *im2 =
27 cvCreateImageHeader(cvSize(imdims[0], imdims[1]), IPL_DEPTH_8U, 1);
28 IplImage *flow_x =
29 cvCreateImageHeader(cvSize(imdims[0], imdims[1]), IPL_DEPTH_32F, 1);
30 IplImage *flow_y =
31 cvCreateImageHeader(cvSize(imdims[0], imdims[1]), IPL_DEPTH_32F, 1);
32
33 im1->imageData = (char*)mxGetPr(prhs[0]);
34 im2->imageData = (char*)mxGetPr(prhs[1]);
35 flow_x->imageData = (char*)mxGetPr(plhs[0]);
36 flow_y->imageData = (char*)mxGetPr(plhs[1]);
37
38 cvCalcOpticalFlowLK(im1, im2, cvSize(winsize,winsize), flow_x, flow_y);
39
40 for (int row = 0; row < imdims[0]; row += 10) {
41 for (int col = 0; col < imdims[1]; col += 10) {
42 cvLine(im1, cvPoint(col,row),
43 cvPoint(int(col + flow_x->imageData[imdims[1] * row + col]),
44 int(row + flow_y->imageData[imdims[1] * row + col])),
45 CV_RGB(1,0,0),
46 1,
47 CV_AA,
48 0);
49
50 }
51 }
52
53 cvDestroyAllWindows();
54 cvNamedWindow("imfoo",CV_WINDOW_AUTOSIZE);
55 // IplImage *myim = cvLoadImage("lena.jpg", -1);
56 cvShowImage("imfoo",im1);
57 // cvShowImage("imfoo",myim);
58 cvWaitKey(0);
59
60 // cvCircle(flow_x, cvPoint( 40, 20), 15, CV_RGB(10,100,100), 5);
61
62 /*
63 FILE* filefx = fopen("fx.pgm", "w");
64 FILE* filefy = fopen("fy.pgm", "w");
65 fprintf(filefx, "P5\n%d %d\n255\n", imdims[1], imdims[0]);
66 fprintf(filefy, "P5\n%d %d\n255\n", imdims[1], imdims[0]);
67 float *ptr = (float*)flow_x->imageData;
68 for (int i = 0; i < imdims[1] * imdims[0]; i++) {
69 // if (fabs(++ptr*) > 0.1)
70 if (fabs(*ptr++) > 0.1) fprintf(filefx, "1");
71 else fprintf(filefx, "0");
72 }
73 fclose(filefx);
74 fclose(filefy);
75 */
76}