123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403 |
- #include "perf_precomp.hpp"
- namespace opencv_test
- {
- using namespace perf;
- typedef Size_MatType BinaryOpTest;
- PERF_TEST_P_(BinaryOpTest, min)
- {
- Size sz = get<0>(GetParam());
- int type = get<1>(GetParam());
- cv::Mat a = Mat(sz, type);
- cv::Mat b = Mat(sz, type);
- cv::Mat c = Mat(sz, type);
- declare.in(a, b, WARMUP_RNG).out(c);
- TEST_CYCLE() cv::min(a, b, c);
- SANITY_CHECK_NOTHING();
- }
- PERF_TEST_P_(BinaryOpTest, minScalarDouble)
- {
- Size sz = get<0>(GetParam());
- int type = get<1>(GetParam());
- cv::Mat a = Mat(sz, type);
- cv::Scalar b;
- cv::Mat c = Mat(sz, type);
- declare.in(a, b, WARMUP_RNG).out(c);
- TEST_CYCLE() cv::min(a, b, c);
- SANITY_CHECK_NOTHING();
- }
- PERF_TEST_P_(BinaryOpTest, minScalarSameType)
- {
- Size sz = get<0>(GetParam());
- int type = get<1>(GetParam());
- cv::Mat a = Mat(sz, type);
- cv::Scalar b;
- cv::Mat c = Mat(sz, type);
- declare.in(a, b, WARMUP_RNG).out(c);
- if (CV_MAT_DEPTH(type) < CV_32S)
- {
- b = Scalar(1, 0, 3, 4); // don't pass non-integer values for 8U/8S/16U/16S processing
- }
- else if (CV_MAT_DEPTH(type) == CV_32S)
- {
- b = Scalar(1, 0, -3, 4); // don't pass non-integer values for 32S processing
- }
- TEST_CYCLE() cv::min(a, b, c);
- SANITY_CHECK_NOTHING();
- }
- PERF_TEST_P_(BinaryOpTest, max)
- {
- Size sz = get<0>(GetParam());
- int type = get<1>(GetParam());
- cv::Mat a = Mat(sz, type);
- cv::Mat b = Mat(sz, type);
- cv::Mat c = Mat(sz, type);
- declare.in(a, b, WARMUP_RNG).out(c);
- TEST_CYCLE() cv::max(a, b, c);
- SANITY_CHECK_NOTHING();
- }
- PERF_TEST_P_(BinaryOpTest, maxScalarDouble)
- {
- Size sz = get<0>(GetParam());
- int type = get<1>(GetParam());
- cv::Mat a = Mat(sz, type);
- cv::Scalar b;
- cv::Mat c = Mat(sz, type);
- declare.in(a, b, WARMUP_RNG).out(c);
- TEST_CYCLE() cv::max(a, b, c);
- SANITY_CHECK_NOTHING();
- }
- PERF_TEST_P_(BinaryOpTest, maxScalarSameType)
- {
- Size sz = get<0>(GetParam());
- int type = get<1>(GetParam());
- cv::Mat a = Mat(sz, type);
- cv::Scalar b;
- cv::Mat c = Mat(sz, type);
- declare.in(a, b, WARMUP_RNG).out(c);
- if (CV_MAT_DEPTH(type) < CV_32S)
- {
- b = Scalar(1, 0, 3, 4); // don't pass non-integer values for 8U/8S/16U/16S processing
- }
- else if (CV_MAT_DEPTH(type) == CV_32S)
- {
- b = Scalar(1, 0, -3, 4); // don't pass non-integer values for 32S processing
- }
- TEST_CYCLE() cv::max(a, b, c);
- SANITY_CHECK_NOTHING();
- }
- PERF_TEST_P_(BinaryOpTest, absdiff)
- {
- Size sz = get<0>(GetParam());
- int type = get<1>(GetParam());
- cv::Mat a = Mat(sz, type);
- cv::Mat b = Mat(sz, type);
- cv::Mat c = Mat(sz, type);
- declare.in(a, b, WARMUP_RNG).out(c);
- if (CV_MAT_DEPTH(type) == CV_32S)
- {
- //see ticket 1529: absdiff can be without saturation on 32S
- a /= 2;
- b /= 2;
- }
- TEST_CYCLE() cv::absdiff(a, b, c);
- SANITY_CHECK_NOTHING();
- }
- PERF_TEST_P_(BinaryOpTest, absdiffScalarDouble)
- {
- Size sz = get<0>(GetParam());
- int type = get<1>(GetParam());
- cv::Mat a = Mat(sz, type);
- cv::Scalar b;
- cv::Mat c = Mat(sz, type);
- declare.in(a, b, WARMUP_RNG).out(c);
- if (CV_MAT_DEPTH(type) == CV_32S)
- {
- //see ticket 1529: absdiff can be without saturation on 32S
- a /= 2;
- b /= 2;
- }
- TEST_CYCLE() cv::absdiff(a, b, c);
- SANITY_CHECK_NOTHING();
- }
- PERF_TEST_P_(BinaryOpTest, absdiffScalarSameType)
- {
- Size sz = get<0>(GetParam());
- int type = get<1>(GetParam());
- cv::Mat a = Mat(sz, type);
- cv::Scalar b;
- cv::Mat c = Mat(sz, type);
- declare.in(a, b, WARMUP_RNG).out(c);
- if (CV_MAT_DEPTH(type) < CV_32S)
- {
- b = Scalar(1, 0, 3, 4); // don't pass non-integer values for 8U/8S/16U/16S processing
- }
- else if (CV_MAT_DEPTH(type) == CV_32S)
- {
- //see ticket 1529: absdiff can be without saturation on 32S
- a /= 2;
- b = Scalar(1, 0, -3, 4); // don't pass non-integer values for 32S processing
- }
- TEST_CYCLE() cv::absdiff(a, b, c);
- SANITY_CHECK_NOTHING();
- }
- PERF_TEST_P_(BinaryOpTest, add)
- {
- Size sz = get<0>(GetParam());
- int type = get<1>(GetParam());
- cv::Mat a = Mat(sz, type);
- cv::Mat b = Mat(sz, type);
- cv::Mat c = Mat(sz, type);
- declare.in(a, b, WARMUP_RNG).out(c);
- declare.time(50);
- if (CV_MAT_DEPTH(type) == CV_32S)
- {
- //see ticket 1529: add can be without saturation on 32S
- a /= 2;
- b /= 2;
- }
- TEST_CYCLE() cv::add(a, b, c);
- SANITY_CHECK_NOTHING();
- }
- PERF_TEST_P_(BinaryOpTest, addScalarDouble)
- {
- Size sz = get<0>(GetParam());
- int type = get<1>(GetParam());
- cv::Mat a = Mat(sz, type);
- cv::Scalar b;
- cv::Mat c = Mat(sz, type);
- declare.in(a, b, WARMUP_RNG).out(c);
- if (CV_MAT_DEPTH(type) == CV_32S)
- {
- //see ticket 1529: add can be without saturation on 32S
- a /= 2;
- b /= 2;
- }
- TEST_CYCLE() cv::add(a, b, c);
- SANITY_CHECK_NOTHING();
- }
- PERF_TEST_P_(BinaryOpTest, addScalarSameType)
- {
- Size sz = get<0>(GetParam());
- int type = get<1>(GetParam());
- cv::Mat a = Mat(sz, type);
- cv::Scalar b;
- cv::Mat c = Mat(sz, type);
- declare.in(a, b, WARMUP_RNG).out(c);
- if (CV_MAT_DEPTH(type) < CV_32S)
- {
- b = Scalar(1, 0, 3, 4); // don't pass non-integer values for 8U/8S/16U/16S processing
- }
- else if (CV_MAT_DEPTH(type) == CV_32S)
- {
- //see ticket 1529: add can be without saturation on 32S
- a /= 2;
- b = Scalar(1, 0, -3, 4); // don't pass non-integer values for 32S processing
- }
- TEST_CYCLE() cv::add(a, b, c, noArray(), type);
- SANITY_CHECK_NOTHING();
- }
- PERF_TEST_P_(BinaryOpTest, subtract)
- {
- Size sz = get<0>(GetParam());
- int type = get<1>(GetParam());
- cv::Mat a = Mat(sz, type);
- cv::Mat b = Mat(sz, type);
- cv::Mat c = Mat(sz, type);
- declare.in(a, b, WARMUP_RNG).out(c);
- if (CV_MAT_DEPTH(type) == CV_32S)
- {
- //see ticket 1529: subtract can be without saturation on 32S
- a /= 2;
- b /= 2;
- }
- TEST_CYCLE() cv::subtract(a, b, c);
- SANITY_CHECK_NOTHING();
- }
- PERF_TEST_P_(BinaryOpTest, subtractScalarDouble)
- {
- Size sz = get<0>(GetParam());
- int type = get<1>(GetParam());
- cv::Mat a = Mat(sz, type);
- cv::Scalar b;
- cv::Mat c = Mat(sz, type);
- declare.in(a, b, WARMUP_RNG).out(c);
- if (CV_MAT_DEPTH(type) == CV_32S)
- {
- //see ticket 1529: subtract can be without saturation on 32S
- a /= 2;
- b /= 2;
- }
- TEST_CYCLE() cv::subtract(a, b, c);
- SANITY_CHECK_NOTHING();
- }
- PERF_TEST_P_(BinaryOpTest, subtractScalarSameType)
- {
- Size sz = get<0>(GetParam());
- int type = get<1>(GetParam());
- cv::Mat a = Mat(sz, type);
- cv::Scalar b;
- cv::Mat c = Mat(sz, type);
- declare.in(a, b, WARMUP_RNG).out(c);
- if (CV_MAT_DEPTH(type) < CV_32S)
- {
- b = Scalar(1, 0, 3, 4); // don't pass non-integer values for 8U/8S/16U/16S processing
- }
- else if (CV_MAT_DEPTH(type) == CV_32S)
- {
- //see ticket 1529: subtract can be without saturation on 32S
- a /= 2;
- b = Scalar(1, 0, -3, 4); // don't pass non-integer values for 32S processing
- }
- TEST_CYCLE() cv::subtract(a, b, c, noArray(), type);
- SANITY_CHECK_NOTHING();
- }
- PERF_TEST_P_(BinaryOpTest, multiply)
- {
- Size sz = get<0>(GetParam());
- int type = get<1>(GetParam());
- cv::Mat a(sz, type), b(sz, type), c(sz, type);
- declare.in(a, b, WARMUP_RNG).out(c);
- if (CV_MAT_DEPTH(type) == CV_32S)
- {
- //According to docs, saturation is not applied when result is 32bit integer
- a /= (2 << 16);
- b /= (2 << 16);
- }
- TEST_CYCLE() cv::multiply(a, b, c);
- SANITY_CHECK_NOTHING();
- }
- PERF_TEST_P_(BinaryOpTest, multiplyScale)
- {
- Size sz = get<0>(GetParam());
- int type = get<1>(GetParam());
- cv::Mat a(sz, type), b(sz, type), c(sz, type);
- double scale = 0.5;
- declare.in(a, b, WARMUP_RNG).out(c);
- if (CV_MAT_DEPTH(type) == CV_32S)
- {
- //According to docs, saturation is not applied when result is 32bit integer
- a /= (2 << 16);
- b /= (2 << 16);
- }
- TEST_CYCLE() cv::multiply(a, b, c, scale);
- SANITY_CHECK_NOTHING();
- }
- PERF_TEST_P_(BinaryOpTest, divide)
- {
- Size sz = get<0>(GetParam());
- int type = get<1>(GetParam());
- cv::Mat a(sz, type), b(sz, type), c(sz, type);
- double scale = 0.5;
- declare.in(a, b, WARMUP_RNG).out(c);
- TEST_CYCLE() cv::divide(a, b, c, scale);
- SANITY_CHECK_NOTHING();
- }
- PERF_TEST_P_(BinaryOpTest, reciprocal)
- {
- Size sz = get<0>(GetParam());
- int type = get<1>(GetParam());
- cv::Mat b(sz, type), c(sz, type);
- double scale = 0.5;
- declare.in(b, WARMUP_RNG).out(c);
- TEST_CYCLE() cv::divide(scale, b, c);
- SANITY_CHECK_NOTHING();
- }
- INSTANTIATE_TEST_CASE_P(/*nothing*/ , BinaryOpTest,
- testing::Combine(
- testing::Values(szVGA, sz720p, sz1080p),
- testing::Values(CV_8UC1, CV_8UC3, CV_8UC4, CV_8SC1, CV_16SC1, CV_16SC2, CV_16SC3, CV_16SC4, CV_32SC1, CV_32FC1)
- )
- );
- } // namespace
|