From af154e30539988bf658a31b555a48669db1e0890 Mon Sep 17 00:00:00 2001 From: Harvey Date: Wed, 27 Oct 2021 13:52:54 +0800 Subject: [PATCH] fixed bug: opencv read tif file convert Palette color image as grayscale image --- modules/imgcodecs/src/grfmt_tiff.cpp | 7 ++++++- modules/imgcodecs/test/test_tiff.cpp | 10 ++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/modules/imgcodecs/src/grfmt_tiff.cpp b/modules/imgcodecs/src/grfmt_tiff.cpp index a46ed3a..5e7523b 100644 --- a/modules/imgcodecs/src/grfmt_tiff.cpp +++ b/modules/imgcodecs/src/grfmt_tiff.cpp @@ -303,7 +303,12 @@ bool TiffDecoder::readHeader() result = true; break; case 8: - m_type = CV_MAKETYPE(CV_8U, !isGrayScale ? wanted_channels : 1); + //Palette color, the value of the component is used as an index into the red, + //green and blue curves in the ColorMap field to retrieve an RGB triplet that defines the color. + if(photometric == PHOTOMETRIC_PALETTE) + m_type = CV_MAKETYPE(CV_8U, 3); + else + m_type = CV_MAKETYPE(CV_8U, !isGrayScale ? wanted_channels : 1); result = true; break; case 16: diff --git a/modules/imgcodecs/test/test_tiff.cpp b/modules/imgcodecs/test/test_tiff.cpp index dec3801..a2f9655 100644 --- a/modules/imgcodecs/test/test_tiff.cpp +++ b/modules/imgcodecs/test/test_tiff.cpp @@ -219,6 +219,16 @@ TEST(Imgcodecs_Tiff, readWrite_32FC3_RAW) EXPECT_EQ(0, remove(filenameOutput.c_str())); } +TEST(Imgcodecs_Tiff, read_palette_color_image) +{ + const string root = cvtest::TS::ptr()->get_data_path(); + const string filenameInput = root + "readwrite/test_palette_color_image.tif"; + + const Mat img = cv::imread(filenameInput, IMREAD_UNCHANGED); + ASSERT_FALSE(img.empty()); + ASSERT_EQ(CV_8UC3, img.type()); +} + //================================================================================================== -- 2.7.4