36#include <visp3/core/vpConfig.h>
38#ifdef VISP_HAVE_CATCH2
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>
52static unsigned int g_resize_width = 293;
53static unsigned int g_resize_height = 137;
55TEST_CASE(
"Nearest Neighbor image resize (naive code)",
"[benchmark]")
57 SECTION(
"unsigned char")
62 BENCHMARK(
"Benchmark Nearest Neighbor uchar image resize (naive code)")
64 common_tools::resizeRef(I, Iresize, common_tools::g_nearest_neighbor);
74 BENCHMARK(
"Benchmark Nearest Neighbor RGBa image resize (naive code)")
76 common_tools::resizeRef(I, Iresize, common_tools::g_nearest_neighbor);
82TEST_CASE(
"Nearest Neighbor image resize (ViSP)",
"[benchmark]")
84 SECTION(
"unsigned char")
89 BENCHMARK(
"Benchmark Nearest Neighbor uchar image resize (ViSP) (1 thread)")
95 const unsigned int nThreads = std::thread::hardware_concurrency();
96 std::stringstream buffer;
97 buffer <<
"Benchmark Nearest Neighbor uchar image resize (ViSP) (" << nThreads <<
"threads)";
98 BENCHMARK(buffer.str().c_str())
110 BENCHMARK(
"Benchmark Nearest Neighbor RGBa image resize (ViSP) (1 thread)")
116 const unsigned int nThreads = std::thread::hardware_concurrency();
117 std::stringstream buffer;
118 buffer <<
"Benchmark Nearest Neighbor RGBa image resize (ViSP) (" << nThreads <<
" threads)";
119 BENCHMARK(buffer.str().c_str())
127TEST_CASE(
"Bilinear image resize (naive code)",
"[benchmark]")
129 SECTION(
"unsigned char")
134 BENCHMARK(
"Benchmark Bilinear uchar image resize (naive code)")
136 common_tools::resizeRef(I, Iresize, common_tools::g_bilinear);
146 BENCHMARK(
"Benchmark Bilinear RGBa image resize (naive code)")
148 common_tools::resizeRef(I, Iresize, common_tools::g_bilinear);
154TEST_CASE(
"Bilinear image resize (ViSP)",
"[benchmark]")
156 SECTION(
"unsigned char")
161 BENCHMARK(
"Benchmark Bilinear uchar image resize (ViSP)")
173 BENCHMARK(
"Benchmark Bilinear RGBa image resize (ViSP)")
181TEST_CASE(
"Area image resize (ViSP)",
"[benchmark]")
183 SECTION(
"unsigned char")
188 BENCHMARK(
"Benchmark Area uchar image resize (ViSP)")
200 BENCHMARK(
"Benchmark Area RGBa image resize (ViSP)")
208TEST_CASE(
"Bicubic image resize (ViSP)",
"[benchmark]")
210 SECTION(
"unsigned char")
215 BENCHMARK(
"Benchmark Bicubic uchar image resize (ViSP) (1 thread)")
221 const unsigned int nThreads = std::thread::hardware_concurrency();
222 std::stringstream buffer;
223 buffer <<
"Benchmark Bicubic uchar image resize (ViSP) (" << nThreads <<
" threads)";
224 BENCHMARK(buffer.str().c_str())
236 BENCHMARK(
"Benchmark Bicubic RGBa image resize (ViSP) (1 thread)")
242 const unsigned int nThreads = std::thread::hardware_concurrency();
243 std::stringstream buffer;
244 buffer <<
"Benchmark Bicubic RGBa image resize (ViSP) (" << nThreads <<
" threads)";
245 BENCHMARK(buffer.str().c_str())
253#if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGCODECS) && defined(HAVE_OPENCV_IMGPROC)
254TEST_CASE(
"Nearest Neighbor image resize (OpenCV)",
"[benchmark]")
256 SECTION(
"unsigned char")
258 cv::Mat img, img_resize;
259 img = cv::imread(imagePathGray, cv::IMREAD_GRAYSCALE);
261 BENCHMARK(
"Benchmark Nearest Neighbor uchar image resize (OpenCV)")
263 cv::resize(img, img_resize, cv::Size(g_resize_width, g_resize_height), 0, 0, cv::INTER_NEAREST);
270 cv::Mat img, img_resize;
271 img = cv::imread(imagePathColor, cv::IMREAD_COLOR);
273 BENCHMARK(
"Benchmark Nearest Neighbor BGR image resize (OpenCV)")
275 cv::resize(img, img_resize, cv::Size(g_resize_width, g_resize_height), 0, 0, cv::INTER_NEAREST);
281TEST_CASE(
"Bilinear image resize (OpenCV)",
"[benchmark]")
283 SECTION(
"unsigned char")
285 cv::Mat img, img_resize;
286 img = cv::imread(imagePathGray, cv::IMREAD_GRAYSCALE);
288 BENCHMARK(
"Benchmark Bilinear uchar image resize (OpenCV)")
290 cv::resize(img, img_resize, cv::Size(g_resize_width, g_resize_height), 0, 0, cv::INTER_LINEAR);
297 cv::Mat img, img_resize;
298 img = cv::imread(imagePathColor, cv::IMREAD_COLOR);
300 BENCHMARK(
"Benchmark Bilinear BGR image resize (OpenCV)")
302 cv::resize(img, img_resize, cv::Size(g_resize_width, g_resize_height), 0, 0, cv::INTER_LINEAR);
308TEST_CASE(
"Area image resize (OpenCV)",
"[benchmark]")
310 SECTION(
"unsigned char")
312 cv::Mat img, img_resize;
313 img = cv::imread(imagePathGray, cv::IMREAD_GRAYSCALE);
315 BENCHMARK(
"Benchmark Area uchar image resize (OpenCV)")
317 cv::resize(img, img_resize, cv::Size(g_resize_width, g_resize_height), 0, 0, cv::INTER_AREA);
324 cv::Mat img, img_resize;
325 img = cv::imread(imagePathColor, cv::IMREAD_COLOR);
327 BENCHMARK(
"Benchmark Area BGR image resize (OpenCV)")
329 cv::resize(img, img_resize, cv::Size(g_resize_width, g_resize_height), 0, 0, cv::INTER_AREA);
335TEST_CASE(
"Bicubic image resize (OpenCV)",
"[benchmark]")
337 SECTION(
"unsigned char")
339 cv::Mat img, img_resize;
340 img = cv::imread(imagePathGray, cv::IMREAD_GRAYSCALE);
342 BENCHMARK(
"Benchmark Bicubic uchar image resize (OpenCV)")
344 cv::resize(img, img_resize, cv::Size(g_resize_width, g_resize_height), 0, 0, cv::INTER_CUBIC);
351 cv::Mat img, img_resize;
352 img = cv::imread(imagePathColor, cv::IMREAD_COLOR);
354 BENCHMARK(
"Benchmark Bicubic BGR image resize (OpenCV)")
356 cv::resize(img, img_resize, cv::Size(g_resize_width, g_resize_height), 0, 0, cv::INTER_CUBIC);
363int main(
int argc,
char *argv[])
365 Catch::Session session;
367 bool runBenchmark =
false;
369 using namespace Catch::clara;
370 auto cli = session.cli()
374 | Opt(imagePathColor,
"imagePathColor")[
"--imagePathColor"](
"Path to color image") |
375 Opt(imagePathGray,
"imagePathColor")[
"--imagePathGray"] |
376 Opt(g_resize_width,
"g_resize_width")[
"--width"](
"Resize width") |
377 Opt(g_resize_height,
"g_resize_height")[
"--height"](
"Resize height");
383 session.applyCommandLine(argc, argv);
388 std::cout <<
"imagePathColor:\n\t" << imagePathColor <<
"\n\t" << I_color.
getWidth() <<
"x" << I_color.
getHeight()
393 std::cout <<
"imagePathGray:\n\t" << imagePathGray <<
"\n\t" << I_gray.
getWidth() <<
"x" << I_gray.
getHeight()
395 std::cout <<
"Resize to: " << g_resize_width <<
"x" << g_resize_height << std::endl;
397 int numFailed = session.run();
410int main() {
return EXIT_SUCCESS; }
static void read(vpImage< unsigned char > &I, const std::string &filename, int backend=IO_DEFAULT_BACKEND)
Definition of the vpImage class member functions.
unsigned int getWidth() const
unsigned int getHeight() const