Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Tetragramm
GitHub Repository: Tetragramm/opencv
Path: blob/master/modules/video/perf/perf_bgfg_knn.cpp
16354 views
1
// This file is part of OpenCV project.
2
// It is subject to the license terms in the LICENSE file found in the top-level directory
3
// of this distribution and at http://opencv.org/license.html.
4
5
#include "perf_precomp.hpp"
6
7
#ifdef HAVE_VIDEO_INPUT
8
#include "perf_bgfg_utils.hpp"
9
10
namespace opencv_test { namespace {
11
12
//////////////////////////// KNN//////////////////////////
13
14
typedef tuple<std::string, int> VideoKNNParamType;
15
typedef TestBaseWithParam<VideoKNNParamType> KNN_Apply;
16
typedef TestBaseWithParam<VideoKNNParamType> KNN_GetBackgroundImage;
17
18
PERF_TEST_P(KNN_Apply, KNN, Combine(Values("gpu/video/768x576.avi", "gpu/video/1920x1080.avi"), Values(1,3)))
19
{
20
VideoKNNParamType params = GetParam();
21
22
const string inputFile = getDataPath(get<0>(params));
23
24
const int cn = get<1>(params);
25
int nFrame = 5;
26
27
vector<Mat> frame_buffer(nFrame);
28
29
cv::VideoCapture cap(inputFile);
30
ASSERT_TRUE(cap.isOpened());
31
prepareData(cap, cn, frame_buffer);
32
33
Mat foreground;
34
35
TEST_CYCLE()
36
{
37
Ptr<cv::BackgroundSubtractorKNN> knn = createBackgroundSubtractorKNN();
38
knn->setDetectShadows(false);
39
foreground.release();
40
for (int i = 0; i < nFrame; i++)
41
{
42
knn->apply(frame_buffer[i], foreground);
43
}
44
}
45
SANITY_CHECK_NOTHING();
46
}
47
48
PERF_TEST_P(KNN_GetBackgroundImage, KNN, Values(
49
std::make_pair<string, int>("gpu/video/768x576.avi", 5),
50
std::make_pair<string, int>("gpu/video/1920x1080.avi", 5)))
51
{
52
VideoKNNParamType params = GetParam();
53
54
const string inputFile = getDataPath(get<0>(params));
55
56
const int cn = 3;
57
const int skipFrames = get<1>(params);
58
int nFrame = 10;
59
60
vector<Mat> frame_buffer(nFrame);
61
62
cv::VideoCapture cap(inputFile);
63
ASSERT_TRUE(cap.isOpened());
64
prepareData(cap, cn, frame_buffer, skipFrames);
65
66
Mat foreground, background;
67
68
TEST_CYCLE()
69
{
70
Ptr<cv::BackgroundSubtractorKNN> knn = createBackgroundSubtractorKNN();
71
knn->setDetectShadows(false);
72
foreground.release();
73
background.release();
74
for (int i = 0; i < nFrame; i++)
75
{
76
knn->apply(frame_buffer[i], foreground);
77
}
78
knn->getBackgroundImage(background);
79
}
80
#ifdef DEBUG_BGFG
81
imwrite(format("fg_%d_%d_knn.png", frame_buffer[0].rows, cn), foreground);
82
imwrite(format("bg_%d_%d_knn.png", frame_buffer[0].rows, cn), background);
83
#endif
84
SANITY_CHECK_NOTHING();
85
}
86
87
}}// namespace
88
89
#endif
90
91