36 #include <visp3/core/vpConfig.h> 38 #ifdef VISP_HAVE_CATCH2 39 #define CATCH_CONFIG_ENABLE_BENCHMARKING 40 #define CATCH_CONFIG_RUNNER 44 #include <visp3/core/vpIoTools.h> 45 #include <visp3/io/vpImageIo.h> 51 static int nThreads = 0;
53 TEST_CASE(
"Benchmark rgba to grayscale (naive code)",
"[benchmark]") {
59 BENCHMARK(
"Benchmark rgba to grayscale (naive code)") {
60 common_tools::RGBaToGrayRef(reinterpret_cast<unsigned char *>(I.
bitmap),
66 TEST_CASE(
"Benchmark rgba to grayscale (ViSP)",
"[benchmark]") {
72 BENCHMARK(
"Benchmark rgba to grayscale (ViSP)") {
78 TEST_CASE(
"Benchmark grayscale to rgba (naive code)",
"[benchmark]") {
84 BENCHMARK(
"Benchmark grayscale to rgba (naive code)") {
85 common_tools::grayToRGBaRef(I.
bitmap, reinterpret_cast<unsigned char *>(I_color.bitmap),
91 TEST_CASE(
"Benchmark grayscale to rgba (ViSP)",
"[benchmark]") {
97 BENCHMARK(
"Benchmark grayscale to rgba (ViSP)") {
103 TEST_CASE(
"Benchmark split RGBa (ViSP)",
"[benchmark]") {
108 BENCHMARK(
"Benchmark split RGBa (ViSP)") {
114 TEST_CASE(
"Benchmark merge to RGBa (ViSP)",
"[benchmark]") {
122 BENCHMARK(
"Benchmark merge to RGBa (ViSP)") {
128 #if VISP_CXX_STANDARD >= VISP_CXX_STANDARD_11 129 TEST_CASE(
"Benchmark bgr to grayscale (naive code)",
"[benchmark]") {
133 std::vector<unsigned char> bgr;
134 common_tools::RGBaToBGR(I, bgr);
138 BENCHMARK(
"Benchmark bgr to grayscale (naive code)") {
139 common_tools::BGRToGrayRef(bgr.data(),
140 reinterpret_cast<unsigned char *
>(I_gray.bitmap),
141 I_gray.getWidth(), I_gray.getHeight(),
false);
146 TEST_CASE(
"Benchmark bgr to grayscale (ViSP)",
"[benchmark]") {
150 std::vector<unsigned char> bgr;
151 common_tools::RGBaToBGR(I, bgr);
155 BENCHMARK(
"Benchmark bgr to grayscale (ViSP)") {
163 #if (VISP_HAVE_OPENCV_VERSION >= 0x020101) 164 SECTION(
"OpenCV Mat type")
169 BENCHMARK(
"Benchmark bgr to grayscale (ViSP + OpenCV Mat type)") {
178 #if (VISP_HAVE_OPENCV_VERSION >= 0x020101) 179 TEST_CASE(
"Benchmark bgr to grayscale (OpenCV)",
"[benchmark]") {
180 cv::Mat img = cv::imread(imagePathColor);
181 cv::Mat img_gray(img.size(), CV_8UC1);
183 BENCHMARK(
"Benchmark bgr to grayscale (OpenCV)") {
184 cv::cvtColor(img, img_gray, cv::COLOR_BGR2GRAY);
191 #if VISP_CXX_STANDARD >= VISP_CXX_STANDARD_11 192 TEST_CASE(
"Benchmark bgr to rgba (naive code)",
"[benchmark]") {
196 std::vector<unsigned char> bgr;
197 common_tools::RGBaToBGR(I, bgr);
200 BENCHMARK(
"Benchmark bgr to rgba (naive code)") {
201 common_tools::BGRToRGBaRef(bgr.data(),
reinterpret_cast<unsigned char*
>(I_bench.bitmap),
207 TEST_CASE(
"Benchmark bgr to rgba (ViSP)",
"[benchmark]") {
211 std::vector<unsigned char> bgr;
212 common_tools::RGBaToBGR(I, bgr);
214 SECTION(
"Check BGR to RGBa conversion")
217 common_tools::BGRToRGBaRef(bgr.data(),
reinterpret_cast<unsigned char*
>(ref.bitmap),
223 CHECK((rgba == ref));
227 BENCHMARK(
"Benchmark bgr to rgba (ViSP)") {
233 #if (VISP_HAVE_OPENCV_VERSION >= 0x020101) 234 SECTION(
"OpenCV Mat type")
239 BENCHMARK(
"Benchmark bgr to rgba (ViSP + OpenCV Mat type)") {
247 TEST_CASE(
"Benchmark bgra to rgba (naive code)",
"[benchmark]") {
251 std::vector<unsigned char> bgra;
252 common_tools::RGBaToBGRa(I, bgra);
255 BENCHMARK(
"Benchmark bgra to rgba (naive code)") {
256 common_tools::BGRaToRGBaRef(bgra.data(),
reinterpret_cast<unsigned char*
>(I_bench.bitmap),
262 TEST_CASE(
"Benchmark bgra to rgba (ViSP)",
"[benchmark]") {
266 std::vector<unsigned char> bgra;
267 common_tools::RGBaToBGRa(I, bgra);
269 SECTION(
"Check BGRa to RGBa conversion")
272 common_tools::BGRaToRGBaRef(bgra.data(),
reinterpret_cast<unsigned char*
>(ref.bitmap),
278 CHECK((rgba == ref));
281 BENCHMARK(
"Benchmark bgra to rgba (ViSP)") {
289 int main(
int argc,
char *argv[])
291 Catch::Session session;
293 bool runBenchmark =
false;
295 using namespace Catch::clara;
296 auto cli = session.cli()
300 | Opt(imagePathColor,
"imagePathColor")
302 (
"Path to color image")
303 | Opt(imagePathGray,
"imagePathColor")
305 (
"Path to gray image")
306 | Opt(nThreads,
"nThreads")
308 (
"Number of threads");
314 session.applyCommandLine(argc, argv);
319 std::cout <<
"imagePathColor:\n\t" << imagePathColor <<
"\n\t" << I_color.
getWidth() <<
"x" << I_color.
getHeight() << std::endl;
323 std::cout <<
"imagePathGray:\n\t" << imagePathGray <<
"\n\t" << I_gray.
getWidth() <<
"x" << I_gray.
getHeight() << std::endl;
324 std::cout <<
"nThreads: " << nThreads <<
" / available threads: " << std::thread::hardware_concurrency() << std::endl;
326 int numFailed = session.run();
static void BGRToRGBa(unsigned char *bgr, unsigned char *rgba, unsigned int width, unsigned int height, bool flip=false)
unsigned int getWidth() const
static void convert(const vpImage< unsigned char > &src, vpImage< vpRGBa > &dest)
Type * bitmap
points toward the bitmap
static void BGRaToRGBa(unsigned char *bgra, unsigned char *rgba, unsigned int width, unsigned int height, bool flip=false)
static void split(const vpImage< vpRGBa > &src, vpImage< unsigned char > *pR, vpImage< unsigned char > *pG, vpImage< unsigned char > *pB, vpImage< unsigned char > *pa=NULL)
unsigned int getSize() const
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 BGRToGrey(unsigned char *bgr, unsigned char *grey, unsigned int width, unsigned int height, bool flip=false, unsigned int nThreads=0)
static void read(vpImage< unsigned char > &I, const std::string &filename)
unsigned int getHeight() const