mirror of
https://github.com/opencv/opencv.git
synced 2025-01-18 22:44:02 +08:00
added perf test for cv::Canny
This commit is contained in:
parent
30b5234e9a
commit
82d3efc6c0
@ -52,16 +52,19 @@
|
||||
namespace cvtest {
|
||||
namespace ocl {
|
||||
|
||||
typedef tuple<Size, MatType, int> FilterParams;
|
||||
typedef TestBaseWithParam<FilterParams> FilterFixture;
|
||||
|
||||
///////////// Blur ////////////////////////
|
||||
|
||||
typedef Size_MatType BlurFixture;
|
||||
typedef FilterFixture BlurFixture;
|
||||
|
||||
OCL_PERF_TEST_P(BlurFixture, Blur,
|
||||
::testing::Combine(OCL_TEST_SIZES, OCL_TEST_TYPES))
|
||||
::testing::Combine(OCL_TEST_SIZES, OCL_TEST_TYPES, OCL_PERF_ENUM(3, 5)))
|
||||
{
|
||||
const Size_MatType_t params = GetParam();
|
||||
const Size srcSize = get<0>(params), ksize(3, 3);
|
||||
const int type = get<1>(params), bordertype = BORDER_CONSTANT;
|
||||
const FilterParams params = GetParam();
|
||||
const Size srcSize = get<0>(params);
|
||||
const int type = get<1>(params), ksize = get<2>(params), bordertype = BORDER_CONSTANT;
|
||||
const double eps = CV_MAT_DEPTH(type) <= CV_32S ? 1 : 1e-5;
|
||||
|
||||
checkDeviceMaxMemoryAllocSize(srcSize, type);
|
||||
@ -69,21 +72,21 @@ OCL_PERF_TEST_P(BlurFixture, Blur,
|
||||
UMat src(srcSize, type), dst(srcSize, type);
|
||||
declare.in(src, WARMUP_RNG).out(dst);
|
||||
|
||||
OCL_TEST_CYCLE() cv::blur(src, dst, ksize, Point(-1, -1), bordertype);
|
||||
OCL_TEST_CYCLE() cv::blur(src, dst, Size(ksize, ksize), Point(-1, -1), bordertype);
|
||||
|
||||
SANITY_CHECK(dst, eps);
|
||||
}
|
||||
|
||||
///////////// Laplacian////////////////////////
|
||||
|
||||
typedef Size_MatType LaplacianFixture;
|
||||
typedef FilterFixture LaplacianFixture;
|
||||
|
||||
OCL_PERF_TEST_P(LaplacianFixture, Laplacian,
|
||||
::testing::Combine(OCL_TEST_SIZES, OCL_TEST_TYPES))
|
||||
::testing::Combine(OCL_TEST_SIZES, OCL_TEST_TYPES, OCL_PERF_ENUM(3, 5)))
|
||||
{
|
||||
const Size_MatType_t params = GetParam();
|
||||
const FilterParams params = GetParam();
|
||||
const Size srcSize = get<0>(params);
|
||||
const int type = get<1>(params), ksize = 3;
|
||||
const int type = get<1>(params), ksize = get<2>(params);
|
||||
const double eps = CV_MAT_DEPTH(type) <= CV_32S ? 1 : 1e-5;
|
||||
|
||||
checkDeviceMaxMemoryAllocSize(srcSize, type);
|
||||
@ -98,14 +101,14 @@ OCL_PERF_TEST_P(LaplacianFixture, Laplacian,
|
||||
|
||||
///////////// Erode ////////////////////
|
||||
|
||||
typedef Size_MatType ErodeFixture;
|
||||
typedef FilterFixture ErodeFixture;
|
||||
|
||||
OCL_PERF_TEST_P(ErodeFixture, Erode,
|
||||
::testing::Combine(OCL_TEST_SIZES, OCL_TEST_TYPES))
|
||||
::testing::Combine(OCL_TEST_SIZES, OCL_TEST_TYPES, OCL_PERF_ENUM(3, 5)))
|
||||
{
|
||||
const Size_MatType_t params = GetParam();
|
||||
const FilterParams params = GetParam();
|
||||
const Size srcSize = get<0>(params);
|
||||
const int type = get<1>(params), ksize = 3;
|
||||
const int type = get<1>(params), ksize = get<2>(params);
|
||||
const Mat ker = getStructuringElement(MORPH_RECT, Size(ksize, ksize));
|
||||
|
||||
checkDeviceMaxMemoryAllocSize(srcSize, type);
|
||||
@ -120,14 +123,14 @@ OCL_PERF_TEST_P(ErodeFixture, Erode,
|
||||
|
||||
///////////// Dilate ////////////////////
|
||||
|
||||
typedef Size_MatType DilateFixture;
|
||||
typedef FilterFixture DilateFixture;
|
||||
|
||||
OCL_PERF_TEST_P(DilateFixture, Dilate,
|
||||
::testing::Combine(OCL_TEST_SIZES, OCL_TEST_TYPES))
|
||||
::testing::Combine(OCL_TEST_SIZES, OCL_TEST_TYPES, OCL_PERF_ENUM(3, 5)))
|
||||
{
|
||||
const Size_MatType_t params = GetParam();
|
||||
const FilterParams params = GetParam();
|
||||
const Size srcSize = get<0>(params);
|
||||
const int type = get<1>(params), ksize = 3;
|
||||
const int type = get<1>(params), ksize = get<2>(params);
|
||||
const Mat ker = getStructuringElement(MORPH_RECT, Size(ksize, ksize));
|
||||
|
||||
checkDeviceMaxMemoryAllocSize(srcSize, type);
|
||||
@ -144,15 +147,15 @@ OCL_PERF_TEST_P(DilateFixture, Dilate,
|
||||
|
||||
CV_ENUM(MorphOp, MORPH_OPEN, MORPH_CLOSE, MORPH_GRADIENT, MORPH_TOPHAT, MORPH_BLACKHAT)
|
||||
|
||||
typedef tuple<Size, MatType, MorphOp> MorphologyExParams;
|
||||
typedef tuple<Size, MatType, MorphOp, int> MorphologyExParams;
|
||||
typedef TestBaseWithParam<MorphologyExParams> MorphologyExFixture;
|
||||
|
||||
OCL_PERF_TEST_P(MorphologyExFixture, MorphologyEx,
|
||||
::testing::Combine(OCL_TEST_SIZES, OCL_TEST_TYPES, MorphOp::all()))
|
||||
::testing::Combine(OCL_TEST_SIZES, OCL_TEST_TYPES, MorphOp::all(), OCL_PERF_ENUM(3, 5)))
|
||||
{
|
||||
const MorphologyExParams params = GetParam();
|
||||
const Size srcSize = get<0>(params);
|
||||
const int type = get<1>(params), op = get<2>(params), ksize = 3;
|
||||
const int type = get<1>(params), op = get<2>(params), ksize = get<3>(params);
|
||||
const Mat ker = getStructuringElement(MORPH_RECT, Size(ksize, ksize));
|
||||
|
||||
checkDeviceMaxMemoryAllocSize(srcSize, type);
|
||||
@ -210,14 +213,14 @@ OCL_PERF_TEST_P(ScharrFixture, Scharr,
|
||||
|
||||
///////////// GaussianBlur ////////////////////////
|
||||
|
||||
typedef Size_MatType GaussianBlurFixture;
|
||||
typedef FilterFixture GaussianBlurFixture;
|
||||
|
||||
OCL_PERF_TEST_P(GaussianBlurFixture, GaussianBlur,
|
||||
::testing::Combine(OCL_TEST_SIZES, OCL_TEST_TYPES))
|
||||
::testing::Combine(OCL_TEST_SIZES, OCL_TEST_TYPES, OCL_PERF_ENUM(3, 5, 7)))
|
||||
{
|
||||
const Size_MatType_t params = GetParam();
|
||||
const FilterParams params = GetParam();
|
||||
const Size srcSize = get<0>(params);
|
||||
const int type = get<1>(params), ksize = 7;
|
||||
const int type = get<1>(params), ksize = get<2>(params);
|
||||
const double eps = CV_MAT_DEPTH(type) <= CV_32S ? 1 + DBL_EPSILON : 3e-4;
|
||||
|
||||
checkDeviceMaxMemoryAllocSize(srcSize, type);
|
||||
@ -232,14 +235,14 @@ OCL_PERF_TEST_P(GaussianBlurFixture, GaussianBlur,
|
||||
|
||||
///////////// Filter2D ////////////////////////
|
||||
|
||||
typedef Size_MatType Filter2DFixture;
|
||||
typedef FilterFixture Filter2DFixture;
|
||||
|
||||
OCL_PERF_TEST_P(Filter2DFixture, Filter2D,
|
||||
::testing::Combine(OCL_TEST_SIZES, OCL_TEST_TYPES))
|
||||
::testing::Combine(OCL_TEST_SIZES, OCL_TEST_TYPES, OCL_PERF_ENUM(3, 5)))
|
||||
{
|
||||
const Size_MatType_t params = GetParam();
|
||||
const FilterParams params = GetParam();
|
||||
const Size srcSize = get<0>(params);
|
||||
const int type = get<1>(params), ksize = 3;
|
||||
const int type = get<1>(params), ksize = get<2>(params);
|
||||
const double eps = CV_MAT_DEPTH(type) <= CV_32S ? 1 : 1e-5;
|
||||
|
||||
checkDeviceMaxMemoryAllocSize(srcSize, type);
|
||||
|
@ -132,7 +132,7 @@ OCL_PERF_TEST_P(CornerHarrisFixture, CornerHarris,
|
||||
|
||||
OCL_TEST_CYCLE() cv::cornerHarris(src, dst, 5, 7, 0.1, borderType);
|
||||
|
||||
SANITY_CHECK(dst, 3e-5);
|
||||
SANITY_CHECK(dst, 5e-5);
|
||||
}
|
||||
|
||||
///////////// Integral ////////////////////////
|
||||
@ -212,6 +212,32 @@ OCL_PERF_TEST_P(SqrBoxFilterFixture, SqrBoxFilter, OCL_TEST_SIZES)
|
||||
SANITY_CHECK(dst);
|
||||
}
|
||||
|
||||
///////////// Canny ////////////////////////
|
||||
|
||||
typedef tuple<int, bool> CannyParams;
|
||||
typedef TestBaseWithParam<CannyParams> CannyFixture;
|
||||
|
||||
OCL_PERF_TEST_P(CannyFixture, Canny, ::testing::Combine(OCL_PERF_ENUM(3, 5), Bool()))
|
||||
{
|
||||
const CannyParams params = GetParam();
|
||||
int apertureSize = get<0>(params);
|
||||
bool L2Grad = get<1>(params);
|
||||
|
||||
Mat _img = imread(getDataPath("gpu/stereobm/aloe-L.png"), cv::IMREAD_GRAYSCALE);
|
||||
ASSERT_TRUE(!_img.empty()) << "can't open aloe-L.png";
|
||||
|
||||
UMat img;
|
||||
_img.copyTo(img);
|
||||
UMat edges(img.size(), CV_8UC1);
|
||||
|
||||
declare.in(img, WARMUP_RNG).out(edges);
|
||||
|
||||
OCL_TEST_CYCLE() cv::Canny(img, edges, 50.0, 100.0, apertureSize, L2Grad);
|
||||
|
||||
SANITY_CHECK(edges);
|
||||
}
|
||||
|
||||
|
||||
} } // namespace cvtest::ocl
|
||||
|
||||
#endif // HAVE_OPENCL
|
||||
|
@ -57,19 +57,33 @@ using std::tr1::tuple;
|
||||
|
||||
#define OCL_PERF_STRATEGY PERF_STRATEGY_SIMPLE
|
||||
|
||||
#define OCL_PERF_TEST(fixture, name) SIMPLE_PERF_TEST(fixture, name)
|
||||
#define OCL_PERF_TEST_P(fixture, name, params) SIMPLE_PERF_TEST_P(fixture, name, params)
|
||||
|
||||
#define SIMPLE_PERF_TEST_P(fixture, name, params)\
|
||||
class OCL##_##fixture##_##name : public fixture {\
|
||||
public:\
|
||||
OCL##_##fixture##_##name() {}\
|
||||
protected:\
|
||||
virtual void PerfTestBody();\
|
||||
};\
|
||||
TEST_P(OCL##_##fixture##_##name, name){ declare.strategy(OCL_PERF_STRATEGY); RunPerfTestBody(); }\
|
||||
INSTANTIATE_TEST_CASE_P(/*none*/, OCL##_##fixture##_##name, params);\
|
||||
#define SIMPLE_PERF_TEST(fixture, name) \
|
||||
class OCL##_##fixture##_##name : \
|
||||
public ::perf::TestBase \
|
||||
{ \
|
||||
public: \
|
||||
OCL##_##fixture##_##name() { } \
|
||||
protected: \
|
||||
virtual void PerfTestBody(); \
|
||||
}; \
|
||||
TEST_F(OCL##_##fixture##_##name, name) { declare.strategy(OCL_PERF_STRATEGY); RunPerfTestBody(); } \
|
||||
void OCL##_##fixture##_##name::PerfTestBody()
|
||||
|
||||
#define SIMPLE_PERF_TEST_P(fixture, name, params) \
|
||||
class OCL##_##fixture##_##name : \
|
||||
public fixture \
|
||||
{ \
|
||||
public: \
|
||||
OCL##_##fixture##_##name() { } \
|
||||
protected: \
|
||||
virtual void PerfTestBody(); \
|
||||
}; \
|
||||
TEST_P(OCL##_##fixture##_##name, name) { declare.strategy(OCL_PERF_STRATEGY); RunPerfTestBody(); } \
|
||||
INSTANTIATE_TEST_CASE_P(/*none*/, OCL##_##fixture##_##name, params); \
|
||||
void OCL##_##fixture##_##name::PerfTestBody()
|
||||
|
||||
#define OCL_SIZE_1 szVGA
|
||||
#define OCL_SIZE_2 sz720p
|
||||
|
Loading…
Reference in New Issue
Block a user