mirror of
https://github.com/opencv/opencv.git
synced 2026-07-30 07:43:03 +04:00
Merge branch 4.x
This commit is contained in:
@@ -194,4 +194,13 @@ if(TARGET opencv_test_imgcodecs AND ((HAVE_PNG AND NOT (PNG_VERSION_STRING VERSI
|
||||
# details: https://github.com/glennrp/libpng/commit/68cb0aaee3de6371b81a4613476d9b33e43e95b1
|
||||
ocv_target_compile_definitions(opencv_test_imgcodecs PRIVATE OPENCV_IMGCODECS_PNG_WITH_EXIF=1)
|
||||
endif()
|
||||
if(TARGET opencv_test_imgcodecs AND ((HAVE_PNG AND NOT (PNG_VERSION_STRING VERSION_LESS "1.6.45")) OR HAVE_SPNG))
|
||||
# cICP does not support in spng
|
||||
# cICP support added in libpng 1.6.45
|
||||
ocv_target_compile_definitions(opencv_test_imgcodecs PRIVATE OPENCV_IMGCODECS_PNG_WITH_cICP=1)
|
||||
endif()
|
||||
if(TARGET opencv_test_imgcodecs AND HAVE_PNG AND PNG_VERSION_STRING VERSION_LESS "1.6.0")
|
||||
# Old libpng (< 1.6.0) is known to have lower precision in internal RGB-to-Gray calculation for 16-bit images.
|
||||
ocv_target_compile_definitions(opencv_test_imgcodecs PRIVATE OPENCV_IMGCODECS_PNG_EPS_16BIT_GRAY=9)
|
||||
endif()
|
||||
ocv_add_perf_tests()
|
||||
|
||||
@@ -109,7 +109,7 @@ enum ImwriteFlags {
|
||||
IMWRITE_TIFF_RESUNIT = 256,//!< For TIFF, use to specify which DPI resolution unit to set. See ImwriteTiffResolutionUnitFlags. Default is IMWRITE_TIFF_RESOLUTION_UNIT_INCH.
|
||||
IMWRITE_TIFF_XDPI = 257,//!< For TIFF, use to specify the X direction DPI
|
||||
IMWRITE_TIFF_YDPI = 258,//!< For TIFF, use to specify the Y direction DPI
|
||||
IMWRITE_TIFF_COMPRESSION = 259,//!< For TIFF, use to specify the image compression scheme. See cv::ImwriteTiffCompressionFlags. Note, for images whose depth is CV_32F, only libtiff's SGILOG compression scheme is used. For other supported depths, the compression scheme can be specified by this flag; LZW compression is the default.
|
||||
IMWRITE_TIFF_COMPRESSION = 259,//!< For TIFF, use to specify the image compression scheme. See cv::ImwriteTiffCompressionFlags. The compression scheme can be specified by this flag; the default is LZW compression, except for 32F depth where it is NONE
|
||||
IMWRITE_TIFF_ROWSPERSTRIP = 278,//!< For TIFF, use to specify the number of rows per strip.
|
||||
IMWRITE_TIFF_PREDICTOR = 317,//!< For TIFF, use to specify predictor. See cv::ImwriteTiffPredictorFlags. Default is IMWRITE_TIFF_PREDICTOR_HORIZONTAL .
|
||||
IMWRITE_JPEG2000_COMPRESSION_X1000 = 272,//!< For JPEG2000, use to specify the target compression rate (multiplied by 1000). The value can be from 0 to 1000. Default is 1000.
|
||||
@@ -541,8 +541,11 @@ can be saved using this function, with these exceptions:
|
||||
64-bit unsigned (CV_64U), 64-bit signed (CV_64S),
|
||||
32-bit float (CV_32F) and 64-bit float (CV_64F) images can be saved.
|
||||
- Multiple images (vector of Mat) can be saved in TIFF format (see the code sample below).
|
||||
- 32-bit float 3-channel (CV_32FC3) TIFF images will be saved
|
||||
using the LogLuv high dynamic range encoding (4 bytes per pixel)
|
||||
- 32-bit float 3-channel (CV_32FC3) TIFF images can be saved
|
||||
using the LogLuv high dynamic range encoding (4 bytes per pixel) through TIFF_COMPRESSION_SGILOG or
|
||||
(3 bytes per pixel) through TIFF_COMPRESSION_SGILOG24.
|
||||
- Other compression schemes (LZW...) are supported as well for 32F depth, but the efficiency might not
|
||||
be very good for the floating-point representation bit patterns.
|
||||
- With GIF encoder, 8-bit unsigned (CV_8U) images can be saved.
|
||||
- GIF images with an alpha channel can be saved using this function.
|
||||
To achieve this, create an 8-bit 4-channel (CV_8UC4) BGRA image, ensuring the alpha channel is the last component.
|
||||
|
||||
@@ -684,6 +684,20 @@ bool PngDecoder::readData( Mat& img )
|
||||
m_exif.parseExif(exif, num_exif);
|
||||
}
|
||||
#endif
|
||||
#ifdef PNG_cICP_SUPPORTED
|
||||
png_byte prim_id, tran_id, matrix_id, video_full_range_flag;
|
||||
if (png_get_cICP(m_png_ptr, m_info_ptr, &prim_id, &tran_id, &matrix_id, &video_full_range_flag))
|
||||
{
|
||||
uint8_t cicp_data[4] = {
|
||||
static_cast<uint8_t>(prim_id),
|
||||
static_cast<uint8_t>(tran_id),
|
||||
static_cast<uint8_t>(matrix_id),
|
||||
static_cast<uint8_t>(video_full_range_flag)
|
||||
};
|
||||
auto& out = m_metadata[IMAGE_METADATA_CICP];
|
||||
out.insert(out.end(), cicp_data, cicp_data + 4);
|
||||
}
|
||||
#endif
|
||||
|
||||
result = true;
|
||||
}
|
||||
|
||||
@@ -1323,8 +1323,12 @@ bool TiffEncoder::writeLibTiff( const std::vector<Mat>& img_vec, const std::vect
|
||||
cv::Ptr<void> tif_cleanup(tif, cv_tiffCloseHandle);
|
||||
|
||||
//Settings that matter to all images
|
||||
int compression = IMWRITE_TIFF_COMPRESSION_LZW;
|
||||
int predictor = IMWRITE_TIFF_PREDICTOR_HORIZONTAL;
|
||||
const int compression_default_32F = IMWRITE_TIFF_COMPRESSION_NONE;
|
||||
const int compression_default = IMWRITE_TIFF_COMPRESSION_LZW;
|
||||
const int predictor_default_32F = IMWRITE_TIFF_PREDICTOR_FLOATINGPOINT;
|
||||
const int predictor_default = IMWRITE_TIFF_PREDICTOR_HORIZONTAL;
|
||||
int compression = -1;
|
||||
int predictor = -1;
|
||||
int resUnit = -1, dpiX = -1, dpiY = -1;
|
||||
|
||||
if(readParam(params, IMWRITE_TIFF_COMPRESSION, compression))
|
||||
@@ -1431,14 +1435,37 @@ bool TiffEncoder::writeLibTiff( const std::vector<Mat>& img_vec, const std::vect
|
||||
CV_TIFF_CHECK_CALL(TIFFSetField(tif, TIFFTAG_PAGENUMBER, page, img_vec.size()));
|
||||
}
|
||||
|
||||
if (type == CV_32FC3 && compression == COMPRESSION_SGILOG)
|
||||
{
|
||||
if (!write_32FC3_SGILOG(img, tif))
|
||||
return false;
|
||||
continue;
|
||||
}
|
||||
const bool is32F = (depth == CV_32F);
|
||||
int page_compression =
|
||||
(compression < 0) ?
|
||||
(is32F ? compression_default_32F : compression_default) :
|
||||
compression;
|
||||
int page_predictor =
|
||||
(predictor < 0) ?
|
||||
(is32F ? predictor_default_32F : predictor_default) :
|
||||
predictor;
|
||||
|
||||
int page_compression = compression;
|
||||
if ((page_compression == COMPRESSION_SGILOG) || (page_compression == COMPRESSION_SGILOG24))
|
||||
{
|
||||
if (depth != CV_32F)
|
||||
CV_Error(cv::Error::StsError, "SGILOG requires 32F");
|
||||
else if ((page_compression == COMPRESSION_SGILOG24) && (type != CV_32FC3))
|
||||
CV_Error(cv::Error::StsError, "SGILOG24 requires 32FC3");
|
||||
else if ((page_compression == COMPRESSION_SGILOG) && (type != CV_32FC1) && (type != CV_32FC3))
|
||||
CV_Error(cv::Error::StsError, "SGILOG requires 32FC1 or 32FC3");
|
||||
else if ((page_compression == COMPRESSION_SGILOG) && (type == CV_32FC3))
|
||||
{
|
||||
if (!write_32FC3_SGILOG(img, tif))
|
||||
return false;
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!write_32F_SGILOG(img, tif, page_compression))
|
||||
return false;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
int bitsPerChannel = -1;
|
||||
uint16_t sample_format = SAMPLEFORMAT_INT;
|
||||
@@ -1493,7 +1520,6 @@ bool TiffEncoder::writeLibTiff( const std::vector<Mat>& img_vec, const std::vect
|
||||
case CV_32F:
|
||||
{
|
||||
bitsPerChannel = 32;
|
||||
page_compression = COMPRESSION_NONE;
|
||||
sample_format = SAMPLEFORMAT_IEEEFP;
|
||||
break;
|
||||
}
|
||||
@@ -1513,10 +1539,10 @@ bool TiffEncoder::writeLibTiff( const std::vector<Mat>& img_vec, const std::vect
|
||||
// Predictor 2 for 64-bit is supported at v4.4.0 or later.
|
||||
// See https://libtiff.gitlab.io/libtiff/releases/v4.4.0.html
|
||||
#if TIFFLIB_VERSION < 20220520 /* Magic number of libtiff v4.4.0 */
|
||||
if ( (bitsPerChannel == 64) && (predictor == PREDICTOR_HORIZONTAL /* 2 */) )
|
||||
if ( (bitsPerChannel == 64) && (page_predictor == PREDICTOR_HORIZONTAL /* 2 */) )
|
||||
{
|
||||
CV_LOG_ONCE_WARNING(NULL, "Predictor 2(HORIZONTAL) for 64-bit is supported at v4.4.0 or later, so it is fallbacked to 0(NONE)");
|
||||
predictor = PREDICTOR_NONE;
|
||||
page_predictor = PREDICTOR_NONE;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -1541,7 +1567,7 @@ bool TiffEncoder::writeLibTiff( const std::vector<Mat>& img_vec, const std::vect
|
||||
|
||||
if (page_compression == COMPRESSION_LZW || page_compression == COMPRESSION_ADOBE_DEFLATE || page_compression == COMPRESSION_DEFLATE)
|
||||
{
|
||||
CV_TIFF_CHECK_CALL(TIFFSetField(tif, TIFFTAG_PREDICTOR, predictor));
|
||||
CV_TIFF_CHECK_CALL(TIFFSetField(tif, TIFFTAG_PREDICTOR, page_predictor));
|
||||
}
|
||||
|
||||
if (resUnit >= RESUNIT_NONE && resUnit <= RESUNIT_CENTIMETER)
|
||||
@@ -1626,6 +1652,41 @@ bool TiffEncoder::write_32FC3_SGILOG(const Mat& _img, void* tif_)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TiffEncoder::write_32F_SGILOG(const Mat& _img, void* tif_, int compression)
|
||||
{
|
||||
TIFF* tif = (TIFF*)tif_;
|
||||
CV_Assert(tif);
|
||||
const int nChannels = _img.channels();
|
||||
CV_Assert(
|
||||
((compression == COMPRESSION_SGILOG) && ((nChannels == 1) || (nChannels == 3))) ||
|
||||
((compression == COMPRESSION_SGILOG24) && (nChannels == 3))
|
||||
);
|
||||
|
||||
Mat img;
|
||||
if (nChannels == 1)
|
||||
img = _img;
|
||||
else
|
||||
cvtColor(_img, img, COLOR_BGR2XYZ);
|
||||
|
||||
//done by caller: CV_TIFF_CHECK_CALL(TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, img.cols));
|
||||
//done by caller: CV_TIFF_CHECK_CALL(TIFFSetField(tif, TIFFTAG_IMAGELENGTH, img.rows));
|
||||
CV_TIFF_CHECK_CALL(TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, nChannels));
|
||||
CV_TIFF_CHECK_CALL(TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, 32));
|
||||
CV_TIFF_CHECK_CALL(TIFFSetField(tif, TIFFTAG_COMPRESSION, compression));
|
||||
CV_TIFF_CHECK_CALL(TIFFSetField(tif, TIFFTAG_PHOTOMETRIC,
|
||||
(nChannels == 1) ? PHOTOMETRIC_LOGL : PHOTOMETRIC_LOGLUV));
|
||||
CV_TIFF_CHECK_CALL(TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG));
|
||||
CV_TIFF_CHECK_CALL(TIFFSetField(tif, TIFFTAG_SGILOGDATAFMT, SGILOGDATAFMT_FLOAT));
|
||||
CV_TIFF_CHECK_CALL(TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, 1));
|
||||
const int strip_size = nChannels * img.cols;
|
||||
for (int i = 0; i < img.rows; i++)
|
||||
{
|
||||
CV_TIFF_CHECK_CALL(TIFFWriteEncodedStrip(tif, i, (tdata_t)img.ptr<float>(i), strip_size * sizeof(float)) != (tsize_t)-1);
|
||||
}
|
||||
CV_TIFF_CHECK_CALL(TIFFWriteDirectory(tif));
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TiffEncoder::writemulti(const std::vector<Mat>& img_vec, const std::vector<int>& params)
|
||||
{
|
||||
return writeLibTiff(img_vec, params);
|
||||
|
||||
@@ -134,6 +134,7 @@ public:
|
||||
protected:
|
||||
bool writeLibTiff( const std::vector<Mat>& img_vec, const std::vector<int>& params );
|
||||
bool write_32FC3_SGILOG(const Mat& img, void* tif);
|
||||
bool write_32F_SGILOG(const Mat& img, void* tif, int compression);
|
||||
|
||||
private:
|
||||
TiffEncoder(const TiffEncoder &); // copy disabled
|
||||
|
||||
@@ -144,6 +144,17 @@ namespace opencv_test { namespace {
|
||||
return iccp_data;
|
||||
}
|
||||
|
||||
#ifdef OPENCV_IMGCODECS_PNG_WITH_cICP
|
||||
static std::vector<uchar> getSampleCicpData() {
|
||||
return {
|
||||
9, // BT.2020 / BT.2100
|
||||
16, // SMPTE ST 2084 (PQ)
|
||||
0, // Identity (RGB)
|
||||
1, // Full Range
|
||||
};
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Test to check whether the EXIF orientation tag was processed successfully or not.
|
||||
* The test uses a set of 8 images named testExifOrientation_{1 to 8}.(extension).
|
||||
@@ -457,18 +468,27 @@ TEST(Imgcodecs_Png, Read_Write_With_Exif)
|
||||
EXPECT_EQ(img2.rows, img.rows);
|
||||
EXPECT_EQ(img2.type(), imgtype);
|
||||
EXPECT_EQ(read_metadata_types, read_metadata_types2);
|
||||
|
||||
#ifdef OPENCV_IMGCODECS_PNG_WITH_EXIF
|
||||
ASSERT_GE(read_metadata_types.size(), 1u);
|
||||
EXPECT_EQ(read_metadata, read_metadata2);
|
||||
EXPECT_EQ(read_metadata_types[0], IMAGE_METADATA_EXIF);
|
||||
EXPECT_EQ(read_metadata_types.size(), read_metadata.size());
|
||||
EXPECT_EQ(read_metadata[0], metadata[0]);
|
||||
#else
|
||||
ASSERT_GE(read_metadata_types.size(), 0u);
|
||||
#endif
|
||||
EXPECT_EQ(cv::norm(img2, img3, NORM_INF), 0.);
|
||||
double mse = cv::norm(img, img2, NORM_L2SQR)/(img.rows*img.cols);
|
||||
EXPECT_EQ(mse, 0); // png is lossless
|
||||
remove(outputname.c_str());
|
||||
}
|
||||
|
||||
#ifdef OPENCV_IMGCODECS_PNG_WITH_cICP
|
||||
TEST(Imgcodecs_Png, Read_Write_With_Exif_Xmp_Iccp_cICP)
|
||||
#else
|
||||
TEST(Imgcodecs_Png, Read_Write_With_Exif_Xmp_Iccp)
|
||||
#endif
|
||||
{
|
||||
int png_compression = 3;
|
||||
int imgtype = CV_MAKETYPE(CV_8U, 3);
|
||||
@@ -482,6 +502,11 @@ TEST(Imgcodecs_Png, Read_Write_With_Exif_Xmp_Iccp)
|
||||
getSampleIccpData(),
|
||||
};
|
||||
|
||||
#ifdef OPENCV_IMGCODECS_PNG_WITH_cICP
|
||||
metadata_types.push_back(IMAGE_METADATA_CICP);
|
||||
metadata.push_back(getSampleCicpData());
|
||||
#endif
|
||||
|
||||
std::vector<int> write_params = {
|
||||
IMWRITE_PNG_COMPRESSION, png_compression
|
||||
};
|
||||
@@ -498,9 +523,23 @@ TEST(Imgcodecs_Png, Read_Write_With_Exif_Xmp_Iccp)
|
||||
EXPECT_EQ(img2.rows, img.rows);
|
||||
EXPECT_EQ(img2.type(), imgtype);
|
||||
|
||||
#ifdef OPENCV_IMGCODECS_PNG_WITH_EXIF
|
||||
EXPECT_EQ(metadata_types, read_metadata_types);
|
||||
EXPECT_EQ(read_metadata_types, read_metadata_types2);
|
||||
EXPECT_EQ(metadata, read_metadata);
|
||||
#else
|
||||
ASSERT_GE(read_metadata_types.size(), 2u);
|
||||
EXPECT_EQ(read_metadata_types[0], IMAGE_METADATA_XMP);
|
||||
EXPECT_EQ(read_metadata_types[1], IMAGE_METADATA_ICCP);
|
||||
|
||||
ASSERT_GE(read_metadata_types2.size(), 2u);
|
||||
EXPECT_EQ(read_metadata_types2[0], IMAGE_METADATA_XMP);
|
||||
EXPECT_EQ(read_metadata_types2[1], IMAGE_METADATA_ICCP);
|
||||
|
||||
ASSERT_GE(read_metadata.size(), 2u);
|
||||
EXPECT_EQ(metadata[1], read_metadata[0]);
|
||||
EXPECT_EQ(metadata[2], read_metadata[1]);
|
||||
#endif
|
||||
remove(outputname.c_str());
|
||||
}
|
||||
|
||||
|
||||
@@ -8,6 +8,13 @@ namespace opencv_test { namespace {
|
||||
|
||||
#if defined(HAVE_PNG) || defined(HAVE_SPNG)
|
||||
|
||||
// See https://github.com/opencv/opencv/pull/28615
|
||||
// Precision differences in 16-bit grayscale conversion between old and modern libpng versions
|
||||
#define OPENCV_IMGCODECS_PNG_EPS_DEFAULT (4)
|
||||
#ifndef OPENCV_IMGCODECS_PNG_EPS_16BIT_GRAY
|
||||
#define OPENCV_IMGCODECS_PNG_EPS_16BIT_GRAY (OPENCV_IMGCODECS_PNG_EPS_DEFAULT)
|
||||
#endif
|
||||
|
||||
TEST(Imgcodecs_Png, write_big)
|
||||
{
|
||||
const string root = cvtest::TS::ptr()->get_data_path();
|
||||
@@ -276,10 +283,12 @@ TEST_P(Imgcodecs_Png_PngSuite, decode)
|
||||
cvtColor(gt_3, gt_258, COLOR_BGR2RGB);
|
||||
}
|
||||
|
||||
const double epsGrayAnydepth = ((gt.depth() == CV_16U) && (gt.channels() > 1)) ? OPENCV_IMGCODECS_PNG_EPS_16BIT_GRAY: OPENCV_IMGCODECS_PNG_EPS_DEFAULT;
|
||||
|
||||
// Perform comparisons with different imread flags
|
||||
EXPECT_PRED_FORMAT2(cvtest::MatComparator(1, 0), imread(filename, IMREAD_GRAYSCALE), gt_0);
|
||||
EXPECT_PRED_FORMAT2(cvtest::MatComparator(1, 0), imread(filename, IMREAD_COLOR), gt_1);
|
||||
EXPECT_PRED_FORMAT2(cvtest::MatComparator(4, 0), imread(filename, IMREAD_ANYDEPTH), gt_2);
|
||||
EXPECT_PRED_FORMAT2(cvtest::MatComparator(epsGrayAnydepth, 0), imread(filename, IMREAD_ANYDEPTH), gt_2); // IMREAD_GRAYSCALE is used.
|
||||
EXPECT_PRED_FORMAT2(cvtest::MatComparator(0, 0), imread(filename, IMREAD_COLOR | IMREAD_ANYDEPTH), gt_3);
|
||||
EXPECT_PRED_FORMAT2(cvtest::MatComparator(1, 0), imread(filename, IMREAD_COLOR_RGB), gt_256);
|
||||
EXPECT_PRED_FORMAT2(cvtest::MatComparator(0, 0), imread(filename, IMREAD_COLOR_RGB | IMREAD_ANYDEPTH), gt_258);
|
||||
|
||||
@@ -937,7 +937,7 @@ Imgcodes_Tiff_TypeAndComp all_types[] = {
|
||||
{ CV_32SC1, true }, { CV_32SC3, true }, { CV_32SC4, true },
|
||||
{ CV_64UC1, true }, { CV_64UC3, true }, { CV_64UC4, true },
|
||||
{ CV_64SC1, true }, { CV_64SC3, true }, { CV_64SC4, true },
|
||||
{ CV_32FC1, false }, { CV_32FC3, false }, { CV_32FC4, false }, // No compression
|
||||
{ CV_32FC1, true }, { CV_32FC3, true }, { CV_32FC4, true },
|
||||
{ CV_64FC1, false }, { CV_64FC3, false }, { CV_64FC4, false } // No compression
|
||||
};
|
||||
|
||||
@@ -1296,6 +1296,47 @@ TEST(Imgcodecs_Tiff, read_junk) {
|
||||
ASSERT_TRUE(img.empty());
|
||||
}
|
||||
|
||||
|
||||
typedef int Imgcodecs_Tiff_32F_Compressions_32F_Values;
|
||||
typedef testing::TestWithParam<Imgcodecs_Tiff_32F_Compressions_32F_Values> Imgcodecs_Tiff_32F_Compressions_32F;
|
||||
|
||||
TEST_P(Imgcodecs_Tiff_32F_Compressions_32F, compressions_32F)
|
||||
{
|
||||
const int compression = GetParam();
|
||||
|
||||
const Size size(64, 64);
|
||||
Mat src = Mat(size, CV_32FC1);
|
||||
cv::randu(src, cv::Scalar::all(0.), cv::Scalar::all(1.));
|
||||
|
||||
std::vector<int> params;
|
||||
if (compression > 0)
|
||||
{
|
||||
params.push_back(IMWRITE_TIFF_COMPRESSION);
|
||||
params.push_back(compression);
|
||||
}
|
||||
|
||||
std::vector<unsigned char> encoded_data;
|
||||
imencode(".tiff", src, encoded_data, params);
|
||||
|
||||
Mat dst;
|
||||
imdecode(encoded_data, IMREAD_UNCHANGED, &dst);
|
||||
|
||||
EXPECT_LE(cvtest::norm(src, dst, NORM_INF), 1e-6);
|
||||
}
|
||||
|
||||
const int Imgcodecs_Tiff_32F_Compressions_32F_All_Values[] =
|
||||
{
|
||||
-1,//will mean "default"
|
||||
IMWRITE_TIFF_COMPRESSION_NONE,
|
||||
IMWRITE_TIFF_COMPRESSION_LZW,
|
||||
//IMWRITE_TIFF_COMPRESSION_LZMA,//might not be configured
|
||||
//IMWRITE_TIFF_COMPRESSION_ZSTD,//might not be configured
|
||||
//IMWRITE_TIFF_COMPRESSION_DEFLATE,//deprecated
|
||||
IMWRITE_TIFF_COMPRESSION_ADOBE_DEFLATE,
|
||||
};
|
||||
|
||||
INSTANTIATE_TEST_CASE_P(compressions_32F, Imgcodecs_Tiff_32F_Compressions_32F, testing::ValuesIn(Imgcodecs_Tiff_32F_Compressions_32F_All_Values));
|
||||
|
||||
#endif
|
||||
|
||||
}} // namespace
|
||||
|
||||
Reference in New Issue
Block a user