From bce5d364df92f99df45f2467a7a818d40b7c6f7f Mon Sep 17 00:00:00 2001 From: Vadim Levin Date: Thu, 27 Aug 2020 15:11:45 +0300 Subject: [PATCH] feat: change OpenJPEG encoder to lossy with default parameters --- modules/imgcodecs/src/grfmt_jpeg2000_openjpeg.cpp | 6 ++++++ modules/imgcodecs/test/test_read_write.cpp | 10 ++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/modules/imgcodecs/src/grfmt_jpeg2000_openjpeg.cpp b/modules/imgcodecs/src/grfmt_jpeg2000_openjpeg.cpp index 4771559439..0f1629302a 100644 --- a/modules/imgcodecs/src/grfmt_jpeg2000_openjpeg.cpp +++ b/modules/imgcodecs/src/grfmt_jpeg2000_openjpeg.cpp @@ -327,12 +327,14 @@ opj_cparameters setupEncoderParameters(const std::vector& params) { opj_cparameters parameters; opj_set_default_encoder_parameters(¶meters); + bool rate_is_specified = false; for (size_t i = 0; i < params.size(); i += 2) { switch (params[i]) { case cv::IMWRITE_JPEG2000_COMPRESSION_X1000: parameters.tcp_rates[0] = 1000.f / std::min(std::max(params[i + 1], 1), 1000); + rate_is_specified = true; break; default: CV_LOG_WARNING(NULL, "OpenJPEG2000(encoder): skip unsupported parameter: " << params[i]); @@ -341,6 +343,10 @@ opj_cparameters setupEncoderParameters(const std::vector& params) } parameters.tcp_numlayers = 1; parameters.cp_disto_alloc = 1; + if (!rate_is_specified) + { + parameters.tcp_rates[0] = 4; + } return parameters; } diff --git a/modules/imgcodecs/test/test_read_write.cpp b/modules/imgcodecs/test/test_read_write.cpp index 890d47a543..9dbd2e33c7 100644 --- a/modules/imgcodecs/test/test_read_write.cpp +++ b/modules/imgcodecs/test/test_read_write.cpp @@ -228,9 +228,12 @@ TEST_P(Imgcodecs_Image, read_write_BGR) double psnrThreshold = 100; if (ext == "jpg") psnrThreshold = 32; -#ifdef HAVE_JASPER +#if defined(HAVE_JASPER) if (ext == "jp2") psnrThreshold = 95; +#elif defined(HAVE_OPENJPEG) + if (ext == "jp2") + psnrThreshold = 35; #endif Mat image = generateTestImageBGR(); @@ -254,9 +257,12 @@ TEST_P(Imgcodecs_Image, read_write_GRAYSCALE) double psnrThreshold = 100; if (ext == "jpg") psnrThreshold = 40; -#ifdef HAVE_JASPER +#if defined(HAVE_JASPER) if (ext == "jp2") psnrThreshold = 70; +#elif defined(HAVE_OPENJPEG) + if (ext == "jp2") + psnrThreshold = 35; #endif Mat image = generateTestImageGrayscale();