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/vpIoTools.h>
46 #include <visp3/io/vpImageIo.h>
48 #if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGCODECS) && defined(HAVE_OPENCV_IMGPROC)
49 #include <opencv2/imgcodecs.hpp>
50 #include <opencv2/imgproc/imgproc.hpp>
56 static int nThreads = 0;
58 TEST_CASE(
"Benchmark rgba to grayscale (naive code)",
"[benchmark]")
65 BENCHMARK(
"Benchmark rgba to grayscale (naive code)")
67 common_tools::RGBaToGrayRef(
reinterpret_cast<unsigned char *
>(I.
bitmap), I_gray.bitmap, I.
getSize());
72 TEST_CASE(
"Benchmark rgba to grayscale (ViSP)",
"[benchmark]")
79 BENCHMARK(
"Benchmark rgba to grayscale (ViSP)")
86 TEST_CASE(
"Benchmark grayscale to rgba (naive code)",
"[benchmark]")
93 BENCHMARK(
"Benchmark grayscale to rgba (naive code)")
95 common_tools::grayToRGBaRef(I.
bitmap,
reinterpret_cast<unsigned char *
>(I_color.bitmap), I.
getSize());
100 TEST_CASE(
"Benchmark grayscale to rgba (ViSP)",
"[benchmark]")
107 BENCHMARK(
"Benchmark grayscale to rgba (ViSP)")
114 TEST_CASE(
"Benchmark split RGBa (ViSP)",
"[benchmark]")
120 BENCHMARK(
"Benchmark split RGBa (ViSP)")
127 TEST_CASE(
"Benchmark merge to RGBa (ViSP)",
"[benchmark]")
136 BENCHMARK(
"Benchmark merge to RGBa (ViSP)")
143 TEST_CASE(
"Benchmark bgr to grayscale (naive code)",
"[benchmark]")
148 std::vector<unsigned char> bgr;
149 common_tools::RGBaToBGR(I, bgr);
153 BENCHMARK(
"Benchmark bgr to grayscale (naive code)")
155 common_tools::BGRToGrayRef(bgr.data(),
reinterpret_cast<unsigned char *
>(I_gray.bitmap), I_gray.getWidth(),
156 I_gray.getHeight(),
false);
161 TEST_CASE(
"Benchmark bgr to grayscale (ViSP)",
"[benchmark]")
166 std::vector<unsigned char> bgr;
167 common_tools::RGBaToBGR(I, bgr);
171 BENCHMARK(
"Benchmark bgr to grayscale (ViSP)")
177 #if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_HIGHGUI) && defined(HAVE_OPENCV_IMGPROC)
179 SECTION(
"OpenCV Mat type")
184 BENCHMARK(
"Benchmark bgr to grayscale (ViSP + OpenCV Mat type)")
193 #if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGCODECS) && defined(HAVE_OPENCV_IMGPROC)
194 TEST_CASE(
"Benchmark bgr to grayscale (OpenCV)",
"[benchmark]")
196 cv::Mat img = cv::imread(imagePathColor);
197 cv::Mat img_gray(img.size(), CV_8UC1);
199 BENCHMARK(
"Benchmark bgr to grayscale (OpenCV)")
201 cv::cvtColor(img, img_gray, cv::COLOR_BGR2GRAY);
207 TEST_CASE(
"Benchmark bgr to rgba (naive code)",
"[benchmark]")
212 std::vector<unsigned char> bgr;
213 common_tools::RGBaToBGR(I, bgr);
216 BENCHMARK(
"Benchmark bgr to rgba (naive code)")
218 common_tools::BGRToRGBaRef(bgr.data(),
reinterpret_cast<unsigned char *
>(I_bench.bitmap), I.
getWidth(),
224 TEST_CASE(
"Benchmark bgr to rgba (ViSP)",
"[benchmark]")
229 std::vector<unsigned char> bgr;
230 common_tools::RGBaToBGR(I, bgr);
232 SECTION(
"Check BGR to RGBa conversion")
235 common_tools::BGRToRGBaRef(bgr.data(),
reinterpret_cast<unsigned char *
>(ref.bitmap), I.
getWidth(), I.
getHeight(),
241 CHECK((rgba == ref));
245 BENCHMARK(
"Benchmark bgr to rgba (ViSP)")
252 #if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_HIGHGUI) && defined(HAVE_OPENCV_IMGPROC)
253 SECTION(
"OpenCV Mat type")
258 BENCHMARK(
"Benchmark bgr to rgba (ViSP + OpenCV Mat type)")
267 TEST_CASE(
"Benchmark bgra to rgba (naive code)",
"[benchmark]")
272 std::vector<unsigned char> bgra;
273 common_tools::RGBaToBGRa(I, bgra);
276 BENCHMARK(
"Benchmark bgra to rgba (naive code)")
278 common_tools::BGRaToRGBaRef(bgra.data(),
reinterpret_cast<unsigned char *
>(I_bench.bitmap), I.
getWidth(),
284 TEST_CASE(
"Benchmark bgra to rgba (ViSP)",
"[benchmark]")
289 std::vector<unsigned char> bgra;
290 common_tools::RGBaToBGRa(I, bgra);
292 SECTION(
"Check BGRa to RGBa conversion")
295 common_tools::BGRaToRGBaRef(bgra.data(),
reinterpret_cast<unsigned char *
>(ref.bitmap), I.
getWidth(), I.
getHeight(),
301 CHECK((rgba == ref));
304 BENCHMARK(
"Benchmark bgra to rgba (ViSP)")
312 int main(
int argc,
char *argv[])
314 Catch::Session session;
316 bool runBenchmark =
false;
318 using namespace Catch::clara;
319 auto cli = session.cli()
323 | Opt(imagePathColor,
"imagePathColor")[
"--imagePathColor"](
"Path to color image") |
324 Opt(imagePathGray,
"imagePathColor")[
"--imagePathGray"](
"Path to gray image") |
325 Opt(nThreads,
"nThreads")[
"--nThreads"](
"Number of threads");
331 session.applyCommandLine(argc, argv);
336 std::cout <<
"imagePathColor:\n\t" << imagePathColor <<
"\n\t" << I_color.
getWidth() <<
"x" << I_color.
getHeight()
341 std::cout <<
"imagePathGray:\n\t" << imagePathGray <<
"\n\t" << I_gray.
getWidth() <<
"x" << I_gray.
getHeight()
343 std::cout <<
"nThreads: " << nThreads <<
" / available threads: " << std::thread::hardware_concurrency()
346 int numFailed = session.run();
359 int main() {
return EXIT_SUCCESS; }
static void merge(const vpImage< unsigned char > *R, const vpImage< unsigned char > *G, const vpImage< unsigned char > *B, const vpImage< unsigned char > *a, vpImage< vpRGBa > &RGBa)
static void split(const vpImage< vpRGBa > &src, vpImage< unsigned char > *pR, vpImage< unsigned char > *pG, vpImage< unsigned char > *pB, vpImage< unsigned char > *pa=nullptr)
static void convert(const vpImage< unsigned char > &src, vpImage< vpRGBa > &dest)
static void BGRToGrey(unsigned char *bgr, unsigned char *grey, unsigned int width, unsigned int height, bool flip=false, unsigned int nThreads=0)
static void BGRToRGBa(unsigned char *bgr, unsigned char *rgba, unsigned int width, unsigned int height, bool flip=false)
static void BGRaToRGBa(unsigned char *bgra, unsigned char *rgba, unsigned int width, unsigned int height, bool flip=false)
static void read(vpImage< unsigned char > &I, const std::string &filename, int backend=IO_DEFAULT_BACKEND)
unsigned int getWidth() const
unsigned int getSize() const
Type * bitmap
points toward the bitmap
unsigned int getHeight() const