36 #include <visp3/core/vpConfig.h>
38 #if defined(VISP_HAVE_CATCH2) && defined(VISP_HAVE_THREADS)
39 #define CATCH_CONFIG_ENABLE_BENCHMARKING
40 #define CATCH_CONFIG_RUNNER
45 #include <visp3/core/vpImageTools.h>
46 #include <visp3/core/vpIoTools.h>
47 #include <visp3/io/vpImageIo.h>
49 #if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGCODECS) && defined(HAVE_OPENCV_IMGPROC)
50 #include <opencv2/imgcodecs.hpp>
51 #include <opencv2/imgproc/imgproc.hpp>
57 static unsigned int g_resize_width = 293;
58 static unsigned int g_resize_height = 137;
60 TEST_CASE(
"Nearest Neighbor image resize (naive code)",
"[benchmark]")
62 SECTION(
"unsigned char")
67 BENCHMARK(
"Benchmark Nearest Neighbor uchar image resize (naive code)")
69 common_tools::resizeRef(I, Iresize, common_tools::g_nearest_neighbor);
79 BENCHMARK(
"Benchmark Nearest Neighbor RGBa image resize (naive code)")
81 common_tools::resizeRef(I, Iresize, common_tools::g_nearest_neighbor);
87 TEST_CASE(
"Nearest Neighbor image resize (ViSP)",
"[benchmark]")
89 SECTION(
"unsigned char")
94 BENCHMARK(
"Benchmark Nearest Neighbor uchar image resize (ViSP) (1 thread)")
100 const unsigned int nThreads = std::thread::hardware_concurrency();
101 std::stringstream buffer;
102 buffer <<
"Benchmark Nearest Neighbor uchar image resize (ViSP) (" << nThreads <<
"threads)";
103 BENCHMARK(buffer.str().c_str())
115 BENCHMARK(
"Benchmark Nearest Neighbor RGBa image resize (ViSP) (1 thread)")
121 const unsigned int nThreads = std::thread::hardware_concurrency();
122 std::stringstream buffer;
123 buffer <<
"Benchmark Nearest Neighbor RGBa image resize (ViSP) (" << nThreads <<
" threads)";
124 BENCHMARK(buffer.str().c_str())
132 TEST_CASE(
"Bilinear image resize (naive code)",
"[benchmark]")
134 SECTION(
"unsigned char")
139 BENCHMARK(
"Benchmark Bilinear uchar image resize (naive code)")
141 common_tools::resizeRef(I, Iresize, common_tools::g_bilinear);
151 BENCHMARK(
"Benchmark Bilinear RGBa image resize (naive code)")
153 common_tools::resizeRef(I, Iresize, common_tools::g_bilinear);
159 TEST_CASE(
"Bilinear image resize (ViSP)",
"[benchmark]")
161 SECTION(
"unsigned char")
166 BENCHMARK(
"Benchmark Bilinear uchar image resize (ViSP)")
178 BENCHMARK(
"Benchmark Bilinear RGBa image resize (ViSP)")
186 TEST_CASE(
"Area image resize (ViSP)",
"[benchmark]")
188 SECTION(
"unsigned char")
193 BENCHMARK(
"Benchmark Area uchar image resize (ViSP)")
205 BENCHMARK(
"Benchmark Area RGBa image resize (ViSP)")
213 TEST_CASE(
"Bicubic image resize (ViSP)",
"[benchmark]")
215 SECTION(
"unsigned char")
220 BENCHMARK(
"Benchmark Bicubic uchar image resize (ViSP) (1 thread)")
226 const unsigned int nThreads = std::thread::hardware_concurrency();
227 std::stringstream buffer;
228 buffer <<
"Benchmark Bicubic uchar image resize (ViSP) (" << nThreads <<
" threads)";
229 BENCHMARK(buffer.str().c_str())
241 BENCHMARK(
"Benchmark Bicubic RGBa image resize (ViSP) (1 thread)")
247 const unsigned int nThreads = std::thread::hardware_concurrency();
248 std::stringstream buffer;
249 buffer <<
"Benchmark Bicubic RGBa image resize (ViSP) (" << nThreads <<
" threads)";
250 BENCHMARK(buffer.str().c_str())
258 #if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGCODECS) && defined(HAVE_OPENCV_IMGPROC)
259 TEST_CASE(
"Nearest Neighbor image resize (OpenCV)",
"[benchmark]")
261 SECTION(
"unsigned char")
263 cv::Mat img, img_resize;
264 img = cv::imread(imagePathGray, cv::IMREAD_GRAYSCALE);
266 BENCHMARK(
"Benchmark Nearest Neighbor uchar image resize (OpenCV)")
268 cv::resize(img, img_resize, cv::Size(g_resize_width, g_resize_height), 0, 0, cv::INTER_NEAREST);
275 cv::Mat img, img_resize;
276 img = cv::imread(imagePathColor, cv::IMREAD_COLOR);
278 BENCHMARK(
"Benchmark Nearest Neighbor BGR image resize (OpenCV)")
280 cv::resize(img, img_resize, cv::Size(g_resize_width, g_resize_height), 0, 0, cv::INTER_NEAREST);
286 TEST_CASE(
"Bilinear image resize (OpenCV)",
"[benchmark]")
288 SECTION(
"unsigned char")
290 cv::Mat img, img_resize;
291 img = cv::imread(imagePathGray, cv::IMREAD_GRAYSCALE);
293 BENCHMARK(
"Benchmark Bilinear uchar image resize (OpenCV)")
295 cv::resize(img, img_resize, cv::Size(g_resize_width, g_resize_height), 0, 0, cv::INTER_LINEAR);
302 cv::Mat img, img_resize;
303 img = cv::imread(imagePathColor, cv::IMREAD_COLOR);
305 BENCHMARK(
"Benchmark Bilinear BGR image resize (OpenCV)")
307 cv::resize(img, img_resize, cv::Size(g_resize_width, g_resize_height), 0, 0, cv::INTER_LINEAR);
313 TEST_CASE(
"Area image resize (OpenCV)",
"[benchmark]")
315 SECTION(
"unsigned char")
317 cv::Mat img, img_resize;
318 img = cv::imread(imagePathGray, cv::IMREAD_GRAYSCALE);
320 BENCHMARK(
"Benchmark Area uchar image resize (OpenCV)")
322 cv::resize(img, img_resize, cv::Size(g_resize_width, g_resize_height), 0, 0, cv::INTER_AREA);
329 cv::Mat img, img_resize;
330 img = cv::imread(imagePathColor, cv::IMREAD_COLOR);
332 BENCHMARK(
"Benchmark Area BGR image resize (OpenCV)")
334 cv::resize(img, img_resize, cv::Size(g_resize_width, g_resize_height), 0, 0, cv::INTER_AREA);
340 TEST_CASE(
"Bicubic image resize (OpenCV)",
"[benchmark]")
342 SECTION(
"unsigned char")
344 cv::Mat img, img_resize;
345 img = cv::imread(imagePathGray, cv::IMREAD_GRAYSCALE);
347 BENCHMARK(
"Benchmark Bicubic uchar image resize (OpenCV)")
349 cv::resize(img, img_resize, cv::Size(g_resize_width, g_resize_height), 0, 0, cv::INTER_CUBIC);
356 cv::Mat img, img_resize;
357 img = cv::imread(imagePathColor, cv::IMREAD_COLOR);
359 BENCHMARK(
"Benchmark Bicubic BGR image resize (OpenCV)")
361 cv::resize(img, img_resize, cv::Size(g_resize_width, g_resize_height), 0, 0, cv::INTER_CUBIC);
368 int main(
int argc,
char *argv[])
370 Catch::Session session;
372 bool runBenchmark =
false;
374 using namespace Catch::clara;
375 auto cli = session.cli()
379 | Opt(imagePathColor,
"imagePathColor")[
"--imagePathColor"](
"Path to color image") |
380 Opt(imagePathGray,
"imagePathColor")[
"--imagePathGray"] |
381 Opt(g_resize_width,
"g_resize_width")[
"--width"](
"Resize width") |
382 Opt(g_resize_height,
"g_resize_height")[
"--height"](
"Resize height");
388 session.applyCommandLine(argc, argv);
393 std::cout <<
"imagePathColor:\n\t" << imagePathColor <<
"\n\t" << I_color.
getWidth() <<
"x" << I_color.
getHeight()
398 std::cout <<
"imagePathGray:\n\t" << imagePathGray <<
"\n\t" << I_gray.
getWidth() <<
"x" << I_gray.
getHeight()
400 std::cout <<
"Resize to: " << g_resize_width <<
"x" << g_resize_height << std::endl;
402 int numFailed = session.run();
415 int main() {
return EXIT_SUCCESS; }
static void read(vpImage< unsigned char > &I, const std::string &filename, int backend=IO_DEFAULT_BACKEND)
unsigned int getWidth() const
unsigned int getHeight() const