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 TEST_CASE(
"Benchmark bgr to grayscale (naive code)",
"[benchmark]") {
132 std::vector<unsigned char> bgr;
133 common_tools::RGBaToBGR(I, bgr);
137 BENCHMARK(
"Benchmark bgr to grayscale (naive code)") {
138 common_tools::BGRToGrayRef(bgr.data(),
139 reinterpret_cast<unsigned char *
>(I_gray.bitmap),
140 I_gray.getWidth(), I_gray.getHeight(),
false);
145 TEST_CASE(
"Benchmark bgr to grayscale (ViSP)",
"[benchmark]") {
149 std::vector<unsigned char> bgr;
150 common_tools::RGBaToBGR(I, bgr);
154 BENCHMARK(
"Benchmark bgr to grayscale (ViSP)") {
162 #if (VISP_HAVE_OPENCV_VERSION >= 0x020101) 163 SECTION(
"OpenCV Mat type")
168 BENCHMARK(
"Benchmark bgr to grayscale (ViSP + OpenCV Mat type)") {
176 #if (VISP_HAVE_OPENCV_VERSION >= 0x020101) 177 TEST_CASE(
"Benchmark bgr to grayscale (OpenCV)",
"[benchmark]") {
178 cv::Mat img = cv::imread(imagePathColor);
179 cv::Mat img_gray(img.size(), CV_8UC1);
181 BENCHMARK(
"Benchmark bgr to grayscale (OpenCV)") {
182 cv::cvtColor(img, img_gray, cv::COLOR_BGR2GRAY);
188 TEST_CASE(
"Benchmark bgr to rgba (naive code)",
"[benchmark]") {
192 std::vector<unsigned char> bgr;
193 common_tools::RGBaToBGR(I, bgr);
196 BENCHMARK(
"Benchmark bgr to rgba (naive code)") {
197 common_tools::BGRToRGBaRef(bgr.data(),
reinterpret_cast<unsigned char*
>(I_bench.bitmap),
203 TEST_CASE(
"Benchmark bgr to rgba (ViSP)",
"[benchmark]") {
207 std::vector<unsigned char> bgr;
208 common_tools::RGBaToBGR(I, bgr);
210 SECTION(
"Check BGR to RGBa conversion")
213 common_tools::BGRToRGBaRef(bgr.data(),
reinterpret_cast<unsigned char*
>(ref.bitmap),
219 CHECK((rgba == ref));
223 BENCHMARK(
"Benchmark bgr to rgba (ViSP)") {
229 #if (VISP_HAVE_OPENCV_VERSION >= 0x020101) 230 SECTION(
"OpenCV Mat type")
235 BENCHMARK(
"Benchmark bgr to rgba (ViSP + OpenCV Mat type)") {
243 TEST_CASE(
"Benchmark bgra to rgba (naive code)",
"[benchmark]") {
247 std::vector<unsigned char> bgra;
248 common_tools::RGBaToBGRa(I, bgra);
251 BENCHMARK(
"Benchmark bgra to rgba (naive code)") {
252 common_tools::BGRaToRGBaRef(bgra.data(),
reinterpret_cast<unsigned char*
>(I_bench.bitmap),
258 TEST_CASE(
"Benchmark bgra to rgba (ViSP)",
"[benchmark]") {
262 std::vector<unsigned char> bgra;
263 common_tools::RGBaToBGRa(I, bgra);
265 SECTION(
"Check BGRa to RGBa conversion")
268 common_tools::BGRaToRGBaRef(bgra.data(),
reinterpret_cast<unsigned char*
>(ref.bitmap),
274 CHECK((rgba == ref));
277 BENCHMARK(
"Benchmark bgra to rgba (ViSP)") {
284 int main(
int argc,
char *argv[])
286 Catch::Session session;
288 bool runBenchmark =
false;
290 using namespace Catch::clara;
291 auto cli = session.cli()
295 | Opt(imagePathColor,
"imagePathColor")
297 (
"Path to color image")
298 | Opt(imagePathGray,
"imagePathColor")
300 (
"Path to gray image")
301 | Opt(nThreads,
"nThreads")
303 (
"Number of threads");
309 session.applyCommandLine(argc, argv);
314 std::cout <<
"imagePathColor:\n\t" << imagePathColor <<
"\n\t" << I_color.
getWidth() <<
"x" << I_color.
getHeight() << std::endl;
318 std::cout <<
"imagePathGray:\n\t" << imagePathGray <<
"\n\t" << I_gray.
getWidth() <<
"x" << I_gray.
getHeight() << std::endl;
319 std::cout <<
"nThreads: " << nThreads <<
" / available threads: " << std::thread::hardware_concurrency() << std::endl;
321 int numFailed = session.run();
static void BGRToRGBa(unsigned char *bgr, 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)
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)
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)
unsigned int getHeight() const
unsigned int getSize() const
unsigned int getWidth() const