Added performance tests for findCirclesGrid and solvePnP
This commit is contained in:
parent
16dd655dd3
commit
99d3ce52c5
41
modules/calib3d/perf/perf_cicrlesGrid.cpp
Normal file
41
modules/calib3d/perf/perf_cicrlesGrid.cpp
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
#include "perf_precomp.hpp"
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
using namespace cv;
|
||||||
|
using namespace perf;
|
||||||
|
|
||||||
|
|
||||||
|
typedef std::tr1::tuple<std::string, cv::Size> String_Size_t;
|
||||||
|
typedef perf::TestBaseWithParam<String_Size_t> String_Size;
|
||||||
|
|
||||||
|
PERF_TEST_P(String_Size, asymm_circles_grid, testing::Values(
|
||||||
|
String_Size_t("cv/cameracalibration/asymmetric_circles/acircles1.jpg", Size(7,13)),
|
||||||
|
String_Size_t("cv/cameracalibration/asymmetric_circles/acircles2.jpg", Size(7,13)),
|
||||||
|
String_Size_t("cv/cameracalibration/asymmetric_circles/acircles3.jpg", Size(7,13)),
|
||||||
|
String_Size_t("cv/cameracalibration/asymmetric_circles/acircles4.jpg", Size(5,5)),
|
||||||
|
String_Size_t("cv/cameracalibration/asymmetric_circles/acircles5.jpg", Size(5,5)),
|
||||||
|
String_Size_t("cv/cameracalibration/asymmetric_circles/acircles6.jpg", Size(5,5)),
|
||||||
|
String_Size_t("cv/cameracalibration/asymmetric_circles/acircles7.jpg", Size(3,9)),
|
||||||
|
String_Size_t("cv/cameracalibration/asymmetric_circles/acircles8.jpg", Size(3,9)),
|
||||||
|
String_Size_t("cv/cameracalibration/asymmetric_circles/acircles9.jpg", Size(3,9))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
{
|
||||||
|
String filename = getDataPath(std::tr1::get<0>(GetParam()));
|
||||||
|
Size gridSize = std::tr1::get<1>(GetParam());
|
||||||
|
|
||||||
|
Mat frame = imread(filename);
|
||||||
|
if (frame.empty())
|
||||||
|
FAIL() << "Unable to load source image " << filename;
|
||||||
|
vector<Point2f> ptvec;
|
||||||
|
ptvec.resize(gridSize.area());
|
||||||
|
|
||||||
|
cvtColor(frame, frame, COLOR_BGR2GRAY);
|
||||||
|
|
||||||
|
declare.in(frame).out(ptvec);
|
||||||
|
|
||||||
|
TEST_CYCLE(100)
|
||||||
|
{
|
||||||
|
ASSERT_TRUE(findCirclesGrid(frame, gridSize, ptvec, CALIB_CB_CLUSTERING | CALIB_CB_ASYMMETRIC_GRID));
|
||||||
|
}
|
||||||
|
}
|
3
modules/calib3d/perf/perf_main.cpp
Normal file
3
modules/calib3d/perf/perf_main.cpp
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
#include "perf_precomp.hpp"
|
||||||
|
|
||||||
|
CV_PERF_TEST_MAIN(calib3d)
|
48
modules/calib3d/perf/perf_pnp.cpp
Normal file
48
modules/calib3d/perf/perf_pnp.cpp
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
#include "perf_precomp.hpp"
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
using namespace cv;
|
||||||
|
using namespace perf;
|
||||||
|
|
||||||
|
|
||||||
|
typedef std::tr1::tuple<std::string, cv::Size> String_Size_t;
|
||||||
|
typedef perf::TestBaseWithParam<int> PointsNumber;
|
||||||
|
|
||||||
|
PERF_TEST_P(PointsNumber, solvePnP, testing::Values(4, 3*9, 7*13)
|
||||||
|
)
|
||||||
|
{
|
||||||
|
int pointsNum = GetParam();
|
||||||
|
|
||||||
|
vector<Point2f> points2d(pointsNum);
|
||||||
|
vector<Point3f> points3d(pointsNum);
|
||||||
|
Mat rvec = Mat::zeros(3, 1, CV_32FC1);
|
||||||
|
Mat tvec = Mat::zeros(3, 1, CV_32FC1);
|
||||||
|
|
||||||
|
Mat distortion = Mat::zeros(5, 1, CV_32FC1);
|
||||||
|
Mat intrinsics = Mat::eye(3, 3, CV_32FC1);
|
||||||
|
intrinsics.at<float> (0, 0) = 400.0;
|
||||||
|
intrinsics.at<float> (1, 1) = 400.0;
|
||||||
|
intrinsics.at<float> (0, 2) = 640 / 2;
|
||||||
|
intrinsics.at<float> (1, 2) = 480 / 2;
|
||||||
|
|
||||||
|
warmup(points3d, WARMUP_RNG);
|
||||||
|
warmup(rvec, WARMUP_RNG);
|
||||||
|
warmup(tvec, WARMUP_RNG);
|
||||||
|
|
||||||
|
projectPoints(points3d, rvec, tvec, intrinsics, distortion, points2d);
|
||||||
|
|
||||||
|
//add noise
|
||||||
|
Mat noise(1, points2d.size(), CV_32FC2);
|
||||||
|
randu(noise, 0, 0.01);
|
||||||
|
add(points2d, noise, points2d);
|
||||||
|
|
||||||
|
declare.in(points3d, points2d);
|
||||||
|
|
||||||
|
TEST_CYCLE(1000)
|
||||||
|
{
|
||||||
|
solvePnP(points3d, points2d, intrinsics, distortion, rvec, tvec, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
SANITY_CHECK(rvec);
|
||||||
|
SANITY_CHECK(tvec);
|
||||||
|
}
|
1
modules/calib3d/perf/perf_precomp.cpp
Normal file
1
modules/calib3d/perf/perf_precomp.cpp
Normal file
@ -0,0 +1 @@
|
|||||||
|
#include "perf_precomp.hpp"
|
13
modules/calib3d/perf/perf_precomp.hpp
Normal file
13
modules/calib3d/perf/perf_precomp.hpp
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
#ifndef __OPENCV_PERF_PRECOMP_HPP__
|
||||||
|
#define __OPENCV_PERF_PRECOMP_HPP__
|
||||||
|
|
||||||
|
#include "opencv2/ts/ts.hpp"
|
||||||
|
#include "opencv2/calib3d/calib3d.hpp"
|
||||||
|
#include "opencv2/highgui/highgui.hpp"
|
||||||
|
#include "opencv2/imgproc/imgproc.hpp"
|
||||||
|
|
||||||
|
#if GTEST_CREATE_SHARED_LIBRARY
|
||||||
|
#error no modules except ts should have GTEST_CREATE_SHARED_LIBRARY defined
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
@ -255,7 +255,7 @@ private:
|
|||||||
static int64 _timeadjustment;
|
static int64 _timeadjustment;
|
||||||
static int64 _calibrate();
|
static int64 _calibrate();
|
||||||
|
|
||||||
static void warmup(cv::Mat m, int wtype);
|
static void warmup_impl(cv::Mat m, int wtype);
|
||||||
static int getSizeInBytes(cv::InputArray a);
|
static int getSizeInBytes(cv::InputArray a);
|
||||||
static cv::Size getSize(cv::InputArray a);
|
static cv::Size getSize(cv::InputArray a);
|
||||||
static void declareArray(SizeVector& sizes, cv::InputOutputArray a, int wtype = 0);
|
static void declareArray(SizeVector& sizes, cv::InputOutputArray a, int wtype = 0);
|
||||||
|
@ -472,12 +472,12 @@ void TestBase::warmup(cv::InputOutputArray a, int wtype)
|
|||||||
{
|
{
|
||||||
if (a.empty()) return;
|
if (a.empty()) return;
|
||||||
if (a.kind() != cv::_InputArray::STD_VECTOR_MAT && a.kind() != cv::_InputArray::STD_VECTOR_VECTOR)
|
if (a.kind() != cv::_InputArray::STD_VECTOR_MAT && a.kind() != cv::_InputArray::STD_VECTOR_VECTOR)
|
||||||
warmup(a.getMat(), wtype);
|
warmup_impl(a.getMat(), wtype);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
size_t total = a.total();
|
size_t total = a.total();
|
||||||
for (size_t i = 0; i < total; ++i)
|
for (size_t i = 0; i < total; ++i)
|
||||||
warmup(a.getMat(i), wtype);
|
warmup_impl(a.getMat(i), wtype);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -507,7 +507,7 @@ bool TestBase::next()
|
|||||||
return ++currentIter < nIters && totalTime < timeLimit;
|
return ++currentIter < nIters && totalTime < timeLimit;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestBase::warmup(cv::Mat m, int wtype)
|
void TestBase::warmup_impl(cv::Mat m, int wtype)
|
||||||
{
|
{
|
||||||
switch(wtype)
|
switch(wtype)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user