perf_bench.cpp 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. #include "perf_precomp.hpp"
  2. #include "../test/common/gapi_tests_common.hpp"
  3. namespace opencv_test
  4. {
  5. struct SobelEdgeDetector: public TestPerfParams<cv::Size> {};
  6. PERF_TEST_P_(SobelEdgeDetector, Fluid)
  7. {
  8. Size sz = GetParam();
  9. initMatsRandU(CV_8UC3, sz, CV_8UC3, false);
  10. GMat in;
  11. GMat gx = gapi::Sobel(in, CV_32F, 1, 0);
  12. GMat gy = gapi::Sobel(in, CV_32F, 0, 1);
  13. GMat mag = gapi::sqrt(gapi::mul(gx, gx) + gapi::mul(gy, gy));
  14. GMat out = gapi::convertTo(mag, CV_8U);
  15. GComputation sobel(in, out);
  16. auto pkg = gapi::combine(gapi::core::fluid::kernels(),
  17. gapi::imgproc::fluid::kernels());
  18. auto cc = sobel.compile(cv::descr_of(in_mat1),
  19. cv::compile_args(cv::gapi::use_only{pkg}));
  20. cc(in_mat1, out_mat_gapi);
  21. TEST_CYCLE()
  22. {
  23. cc(in_mat1, out_mat_gapi);
  24. }
  25. SANITY_CHECK_NOTHING();
  26. }
  27. PERF_TEST_P_(SobelEdgeDetector, OpenCV)
  28. {
  29. Size sz = GetParam();
  30. initMatsRandU(CV_8UC3, sz, CV_8UC3, false);
  31. Mat gx, gy;
  32. Mat mag;
  33. auto cc = [&](const cv::Mat &in_mat, cv::Mat &out_mat) {
  34. using namespace cv;
  35. Sobel(in_mat, gx, CV_32F, 1, 0);
  36. Sobel(in_mat, gy, CV_32F, 0, 1);
  37. sqrt(gx.mul(gx) + gy.mul(gy), mag);
  38. mag.convertTo(out_mat, CV_8U);
  39. };
  40. cc(in_mat1, out_mat_gapi);
  41. TEST_CYCLE()
  42. {
  43. cc(in_mat1, out_mat_gapi);
  44. }
  45. SANITY_CHECK_NOTHING();
  46. }
  47. PERF_TEST_P_(SobelEdgeDetector, OpenCV_Smarter)
  48. {
  49. Size sz = GetParam();
  50. initMatsRandU(CV_8UC3, sz, CV_8UC3, false);
  51. Mat gx, gy;
  52. Mat ggx, ggy;
  53. Mat sum;
  54. Mat mag;
  55. auto cc = [&](const cv::Mat &in_mat, cv::Mat &out_mat) {
  56. cv::Sobel(in_mat, gx, CV_32F, 1, 0);
  57. cv::Sobel(in_mat, gy, CV_32F, 0, 1);
  58. cv::multiply(gx, gx, ggx);
  59. cv::multiply(gy, gy, ggy);
  60. cv::add(ggx, ggy, sum);
  61. cv::sqrt(sum, mag);
  62. mag.convertTo(out_mat, CV_8U);
  63. };
  64. cc(in_mat1, out_mat_gapi);
  65. TEST_CYCLE()
  66. {
  67. cc(in_mat1, out_mat_gapi);
  68. }
  69. SANITY_CHECK_NOTHING();
  70. }
  71. INSTANTIATE_TEST_CASE_P(Benchmark, SobelEdgeDetector,
  72. Values(cv::Size(320, 240),
  73. cv::Size(640, 480),
  74. cv::Size(1280, 720),
  75. cv::Size(1920, 1080),
  76. cv::Size(3840, 2170)));
  77. } // opencv_test