38#include <visp3/core/vpConfig.h>
40#if defined(VISP_HAVE_CATCH2) && defined(VISP_HAVE_THREADS)
42#include <catch_amalgamated.hpp>
45#include <visp3/core/vpIoTools.h>
46#include <visp3/io/vpImageIo.h>
48#ifdef ENABLE_VISP_NAMESPACE
53VP_ATTRIBUTE_NO_DESTROY
static std::vector<std::string> paths {
54 ipath +
"/Solvay/Solvay_conference_1927_Version2_640x440",
55 ipath +
"/Solvay/Solvay_conference_1927_Version2_1024x705",
56 ipath +
"/Solvay/Solvay_conference_1927_Version2_1280x881",
57 ipath +
"/Solvay/Solvay_conference_1927_Version2_2126x1463",
59VP_ATTRIBUTE_NO_DESTROY
static std::vector<std::string> names {
"Solvay (640x440)",
"Solvay (1024x705)",
"Solvay (1280x881)",
60 "Solvay (2126x1463)" };
61VP_ATTRIBUTE_NO_DESTROY
static std::vector<vpImageIo::vpImageIoBackendType> backends
63#if defined(VISP_HAVE_JPEG) && defined(VISP_HAVE_PNG)
66#if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGCODECS)
69#if defined(VISP_HAVE_SIMDLIB)
74VP_ATTRIBUTE_NO_DESTROY
static std::vector<std::string> backendNamesJpeg
76#if defined(VISP_HAVE_JPEG)
79#if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGCODECS)
84VP_ATTRIBUTE_NO_DESTROY
static std::vector<std::string> backendNamesPng
86#if defined(VISP_HAVE_PNG)
89#if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGCODECS)
94static int nThreads = 0;
96TEST_CASE(
"Benchmark grayscale JPEG image loading",
"[benchmark]")
98 for (
size_t i = 0;
i < paths.size();
i++) {
101 for (
size_t j = 0;
j < backends.size();
j++) {
104 BENCHMARK(backendNamesJpeg[j] +
" backend")
114TEST_CASE(
"Benchmark RGBA JPEG image loading",
"[benchmark]")
116 for (
size_t i = 0;
i < paths.size();
i++) {
119 for (
size_t j = 0;
j < backends.size();
j++) {
122 BENCHMARK(backendNamesJpeg[j] +
" backend")
132TEST_CASE(
"Benchmark grayscale PNG image loading",
"[benchmark]")
134 for (
size_t i = 0;
i < paths.size();
i++) {
137 for (
size_t j = 0;
j < backends.size();
j++) {
140 BENCHMARK(backendNamesPng[j] +
" backend")
150TEST_CASE(
"Benchmark RGBA PNG image loading",
"[benchmark]")
152 for (
size_t i = 0;
i < paths.size();
i++) {
155 for (
size_t j = 0;
j < backends.size();
j++) {
158 BENCHMARK(backendNamesPng[j] +
" backend")
168TEST_CASE(
"Benchmark grayscale JPEG image saving",
"[benchmark]")
171 std::string directory_filename_tmp =
176 for (
size_t i = 0;
i < paths.size();
i++) {
182 for (
size_t j = 0;
j < backends.size();
j++) {
183 BENCHMARK(backendNamesJpeg[j] +
" backend")
185 vpImageIo::write(I, directory_filename_tmp +
"/ViSP_tmp_perf_write.jpg", backends[j]);
195TEST_CASE(
"Benchmark RGBA JPEG image saving",
"[benchmark]")
198 std::string directory_filename_tmp =
203 for (
size_t i = 0;
i < paths.size();
i++) {
209 for (
size_t j = 0;
j < backends.size();
j++) {
210 BENCHMARK(backendNamesJpeg[j] +
" backend")
212 vpImageIo::write(I, directory_filename_tmp +
"/ViSP_tmp_perf_write.jpg", backends[j]);
222TEST_CASE(
"Benchmark grayscale PNG image saving",
"[benchmark]")
225 std::string directory_filename_tmp =
230 for (
size_t i = 0;
i < paths.size();
i++) {
236 for (
size_t j = 0;
j < backends.size();
j++) {
237 BENCHMARK(backendNamesPng[j] +
" backend")
239 vpImageIo::write(I, directory_filename_tmp +
"/ViSP_tmp_perf_write.png", backends[j]);
249TEST_CASE(
"Benchmark RGBA PNG image saving",
"[benchmark]")
252 std::string directory_filename_tmp =
257 for (
size_t i = 0;
i < paths.size();
i++) {
263 for (
size_t j = 0;
j < backends.size();
j++) {
264 BENCHMARK(backendNamesPng[j] +
" backend")
266 vpImageIo::write(I, directory_filename_tmp +
"/ViSP_tmp_perf_write.png", backends[j]);
276int main(
int argc,
char *argv[])
278 Catch::Session session;
280 bool runBenchmark =
false;
282 auto cli = session.cli()
283 | Catch::Clara::Opt(runBenchmark)[
"--benchmark"](
"Run benchmark")
284 | Catch::Clara::Opt(nThreads,
"nThreads")[
"--nThreads"](
"Number of threads");
288 session.applyCommandLine(argc, argv);
291 std::cout <<
"nThreads: " << nThreads <<
" / available threads: " << std::thread::hardware_concurrency() << std::endl;
293 int numFailed = session.run();
302int 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-turbo.
@ IO_OPENCV_BACKEND
Use OpenCV imgcodecs module.
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")