object_detect_2.4.8.cpp

Code for 2.4.8 - Hossein Khosravi, 2015-05-08 08:36 am

Download (4.6 kB)

 
1
// OpenCV_Exam08_Mat.cpp : Defines the entry point for the console application.
2
//
3
4
#include "stdafx.h"
5
6
7
#include <opencv.hpp>
8
9
#ifdef _DEBUG
10
#pragma comment (lib, "opencv_highgui248d.lib")
11
#pragma comment (lib, "opencv_imgproc248d.lib")
12
#pragma comment (lib, "opencv_core248d.lib")
13
#pragma comment (lib, "opencv_calib3d248d.lib")
14
#pragma comment (lib, "opencv_features2d248d.lib")
15
#pragma comment (lib, "opencv_ocl248d.lib")
16
#pragma comment (lib, "opencv_video248d.lib")
17
18
#else
19
#pragma comment (lib, "opencv_core248.lib")
20
#pragma comment (lib, "opencv_imgproc248.lib")
21
#pragma comment (lib, "opencv_highgui248.lib")
22
#pragma comment (lib, "opencv_calib3d248.lib")
23
#pragma comment (lib, "opencv_ocl248.lib")
24
#pragma comment (lib, "opencv_video248.lib")
25
#endif
26
27
#include <iostream>
28
#include <string>
29
30
#include "opencv2/core/core.hpp"
31
#include "opencv2/ocl/ocl.hpp"
32
#include "opencv2/highgui/highgui.hpp"
33
34
using namespace std;
35
using namespace cv;
36
using namespace cv::ocl;
37
38
#define M_MOG  1
39
#define M_MOG2 2
40
41
int main(int argc, const char** argv)
42
{
43
        /*cv::CommandLineParser cmd(argc, argv,
44
                "{ c | camera | false       | use camera }"
45
                "{ f | file   | 768x576.avi | input video file }"
46
                "{ m | method | mog         | method (mog, mog2) }"
47
                "{ h | help   | false       | print help message }");
48
49
        if (cmd.get<bool>("help"))
50
        {
51
                cout << "Usage : bgfg_segm [options]" << endl;
52
                cout << "Available options:" << endl;
53
                cmd.printParams();
54
                return EXIT_SUCCESS;
55
        }*/
56
57
        bool useCamera = false;//cmd.get<bool>("camera");
58
        string file = "..\\768x576.avi";//cmd.get<string>("file");
59
        string method = "mog2";//cmd.get<string>("method");
60
61
        if (method != "mog" && method != "mog2")
62
        {
63
                cerr << "Incorrect method" << endl;
64
                return EXIT_FAILURE;
65
        }
66
67
        int m = method == "mog" ? M_MOG : M_MOG2;
68
69
        VideoCapture cap;
70
        if (useCamera)
71
                cap.open(0);
72
        else
73
                cap.open(file);
74
75
        if (!cap.isOpened())
76
        {
77
                cout << "can not open camera or video file" << endl;
78
                return EXIT_FAILURE;
79
        }
80
81
        Mat frame;
82
        cap >> frame;
83
84
#define USE_OCL
85
#ifdef USE_OCL
86
        oclMat d_frame(frame);
87
88
        cv::ocl::MOG mog;
89
        cv::ocl::MOG2 mog2;
90
91
        oclMat d_fgmask, d_fgimg, d_bgimg;
92
93
        d_fgimg.create(d_frame.size(), d_frame.type());
94
95
        Mat fgmask, fgimg, bgimg;
96
97
        switch (m)
98
        {
99
        case M_MOG:
100
                mog(d_frame, d_fgmask, 0.01f);
101
                break;
102
103
        case M_MOG2:
104
                mog2(d_frame, d_fgmask);
105
                break;
106
        }
107
#else
108
109
        BackgroundSubtractorMOG mog;
110
        BackgroundSubtractorMOG2 mog2;
111
112
        Mat fgmask, fgimg, bgimg;
113
114
        switch (m)
115
        {
116
        case M_MOG:
117
                mog(frame, fgmask, 0.01f);
118
                break;
119
120
        case M_MOG2:
121
                mog2(frame, fgmask);
122
                break;
123
        }
124
#endif
125
126
127
#ifdef USE_OCL
128
        int64 start = cv::getTickCount();
129
        for (;;)
130
        {
131
                cap >> frame;
132
                if (frame.empty())
133
                        break;
134
                d_frame.upload(frame);
135
136
137
                //int64 start = cv::getTickCount();
138
                //update the model
139
                switch (m)
140
                {
141
                case M_MOG:
142
                        mog(d_frame, d_fgmask, 0.01f);
143
                        mog.getBackgroundImage(d_bgimg);
144
                        break;
145
146
                case M_MOG2:
147
                        mog2(d_frame, d_fgmask);
148
                        mog2.getBackgroundImage(d_bgimg);
149
                        break;
150
                }
151
152
                //double fps = cv::getTickFrequency() / (cv::getTickCount() - start);
153
                //std::cout << "FPS : " << fps << std::endl;
154
155
                d_fgimg.setTo(Scalar::all(0));
156
                d_frame.copyTo(d_fgimg, d_fgmask);
157
158
                d_fgmask.download(fgmask);
159
                d_fgimg.download(fgimg);
160
                if (!d_bgimg.empty())
161
                        d_bgimg.download(bgimg);
162
163
                imshow("image", frame);
164
                imshow("foreground mask", fgmask);
165
                imshow("foreground image", fgimg);
166
                if (!bgimg.empty())
167
                        imshow("mean background image", bgimg);
168
169
                if (27 == waitKey(1))
170
                        break;
171
        }
172
        double t = (cv::getTickCount() - start) / cv::getTickFrequency();
173
        std::cout << "t : " << t << std::endl;
174
        getchar();
175
#else
176
        int64 start = cv::getTickCount();
177
        for (;;)
178
        {
179
                cap >> frame;
180
                if (frame.empty())
181
                        break;
182
183
                //int64 start = cv::getTickCount();
184
185
                //update the model
186
                switch (m)
187
                {
188
                case M_MOG:
189
                        mog(frame, fgmask, 0.01f);
190
                        mog.getBackgroundImage(bgimg);
191
                        break;
192
193
                case M_MOG2:
194
                        mog2(frame, fgmask);
195
                        mog2.getBackgroundImage(bgimg);
196
                        break;
197
                }
198
199
                //double fps = cv::getTickFrequency() / (cv::getTickCount() - start);
200
                //std::cout << "FPS : " << fps << std::endl;
201
202
                fgimg.setTo(Scalar::all(0));
203
                frame.copyTo(fgimg, fgmask);
204
205
206
                imshow("image", frame);
207
                imshow("foreground mask", fgmask);
208
                imshow("foreground image", fgimg);
209
                if (!bgimg.empty())
210
                        imshow("mean background image", bgimg);
211
212
                if (27 == waitKey(1))
213
                        break;
214
        }
215
216
        double t = (cv::getTickCount() - start) / cv::getTickFrequency();
217
        std::cout << "t : " << t << std::endl;
218
        getchar();
219
#endif
220
        return EXIT_SUCCESS;
221
}