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>
48static std::vector<std::string> paths{
49 ipath +
"/Solvay/Solvay_conference_1927_Version2_640x440",
50 ipath +
"/Solvay/Solvay_conference_1927_Version2_1024x705",
51 ipath +
"/Solvay/Solvay_conference_1927_Version2_1280x881",
52 ipath +
"/Solvay/Solvay_conference_1927_Version2_2126x1463",
54static std::vector<std::string> names{
"Solvay (640x440)",
"Solvay (1024x705)",
"Solvay (1280x881)",
55 "Solvay (2126x1463)"};
56static std::vector<vpImageIo::vpImageIoBackendType> backends
58#if defined(VISP_HAVE_JPEG) && defined(VISP_HAVE_PNG)
61#if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGCODECS)
66static std::vector<std::string> backendNamesJpeg
68#if defined(VISP_HAVE_JPEG)
71#if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGCODECS)
76static std::vector<std::string> backendNamesPng
78#if defined(VISP_HAVE_PNG)
81#if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGCODECS)
86static int nThreads = 0;
88TEST_CASE(
"Benchmark grayscale JPEG image loading",
"[benchmark]")
90 for (
size_t i = 0; i < paths.size(); i++) {
93 for (
size_t j = 0; j < backends.size(); j++) {
96 BENCHMARK(backendNamesJpeg[j] +
" backend")
106TEST_CASE(
"Benchmark RGBA JPEG image loading",
"[benchmark]")
108 for (
size_t i = 0; i < paths.size(); i++) {
111 for (
size_t j = 0; j < backends.size(); j++) {
114 BENCHMARK(backendNamesJpeg[j] +
" backend")
124TEST_CASE(
"Benchmark grayscale PNG image loading",
"[benchmark]")
126 for (
size_t i = 0; i < paths.size(); i++) {
129 for (
size_t j = 0; j < backends.size(); j++) {
132 BENCHMARK(backendNamesPng[j] +
" backend")
142TEST_CASE(
"Benchmark RGBA PNG image loading",
"[benchmark]")
144 for (
size_t i = 0; i < paths.size(); i++) {
147 for (
size_t j = 0; j < backends.size(); j++) {
150 BENCHMARK(backendNamesPng[j] +
" backend")
160TEST_CASE(
"Benchmark grayscale JPEG image saving",
"[benchmark]")
163 std::string directory_filename_tmp =
168 for (
size_t i = 0; i < paths.size(); i++) {
174 for (
size_t j = 0; j < backends.size(); j++) {
175 BENCHMARK(backendNamesJpeg[j] +
" backend")
177 vpImageIo::write(I, directory_filename_tmp +
"/ViSP_tmp_perf_write.jpg", backends[j]);
187TEST_CASE(
"Benchmark RGBA JPEG image saving",
"[benchmark]")
190 std::string directory_filename_tmp =
195 for (
size_t i = 0; i < paths.size(); i++) {
201 for (
size_t j = 0; j < backends.size(); j++) {
202 BENCHMARK(backendNamesJpeg[j] +
" backend")
204 vpImageIo::write(I, directory_filename_tmp +
"/ViSP_tmp_perf_write.jpg", backends[j]);
214TEST_CASE(
"Benchmark grayscale PNG image saving",
"[benchmark]")
217 std::string directory_filename_tmp =
222 for (
size_t i = 0; i < paths.size(); i++) {
228 for (
size_t j = 0; j < backends.size(); j++) {
229 BENCHMARK(backendNamesPng[j] +
" backend")
231 vpImageIo::write(I, directory_filename_tmp +
"/ViSP_tmp_perf_write.png", backends[j]);
241TEST_CASE(
"Benchmark RGBA PNG image saving",
"[benchmark]")
244 std::string directory_filename_tmp =
249 for (
size_t i = 0; i < paths.size(); i++) {
255 for (
size_t j = 0; j < backends.size(); j++) {
256 BENCHMARK(backendNamesPng[j] +
" backend")
258 vpImageIo::write(I, directory_filename_tmp +
"/ViSP_tmp_perf_write.png", backends[j]);
268int main(
int argc,
char *argv[])
270 Catch::Session session;
272 bool runBenchmark =
false;
274 using namespace Catch::clara;
275 auto cli = session.cli()
279 Opt(nThreads,
"nThreads")[
"--nThreads"](
"Number of threads");
285 session.applyCommandLine(argc, argv);
288 std::cout <<
"nThreads: " << nThreads <<
" / available threads: " << std::thread::hardware_concurrency()
291 int numFailed = session.run();
304int main() {
return EXIT_SUCCESS; }
@ IO_STB_IMAGE_BACKEND
Use embedded stb_image library.
@ IO_SIMDLIB_BACKEND
Use embedded simd library.
@ IO_SYSTEM_LIB_BACKEND
Use system libraries like libpng or libjpeg.
@ IO_OPENCV_BACKEND
Use OpenCV.
static void read(vpImage< unsigned char > &I, const std::string &filename, int backend=IO_DEFAULT_BACKEND)
static void write(const vpImage< unsigned char > &I, const std::string &filename, int backend=IO_DEFAULT_BACKEND)
Definition of the vpImage class member functions.
VISP_EXPORT std::string getDateTime(const std::string &format="%Y/%m/%d %H:%M:%S")