adding support for 16-bit 4 channel tiffs
- when IMREAD_UNCHANGED is set in flags, the tiff is read with 4 channels - adding test for read/write
This commit is contained in:
parent
7da0e37ba8
commit
fc8f0e341b
@ -158,7 +158,7 @@ bool TiffDecoder::readHeader()
|
|||||||
m_type = CV_MAKETYPE(CV_8U, photometric > 1 ? wanted_channels : 1);
|
m_type = CV_MAKETYPE(CV_8U, photometric > 1 ? wanted_channels : 1);
|
||||||
break;
|
break;
|
||||||
case 16:
|
case 16:
|
||||||
m_type = CV_MAKETYPE(CV_16U, photometric > 1 ? 3 : 1);
|
m_type = CV_MAKETYPE(CV_16U, photometric > 1 ? wanted_channels : 1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 32:
|
case 32:
|
||||||
@ -326,6 +326,21 @@ bool TiffDecoder::readData( Mat& img )
|
|||||||
(ushort*)(data + img.step*i) + x*3, 0,
|
(ushort*)(data + img.step*i) + x*3, 0,
|
||||||
cvSize(tile_width,1) );
|
cvSize(tile_width,1) );
|
||||||
}
|
}
|
||||||
|
else if (ncn == 4)
|
||||||
|
{
|
||||||
|
if (wanted_channels == 4)
|
||||||
|
{
|
||||||
|
icvCvt_BGRA2RGBA_16u_C4R(buffer16 + i*tile_width0*ncn, 0,
|
||||||
|
(ushort*)(data + img.step*i) + x * 4, 0,
|
||||||
|
cvSize(tile_width, 1));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
icvCvt_BGRA2BGR_16u_C4C3R(buffer16 + i*tile_width0*ncn, 0,
|
||||||
|
(ushort*)(data + img.step*i) + x * 3, 0,
|
||||||
|
cvSize(tile_width, 1), 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
icvCvt_BGRA2BGR_16u_C4C3R(buffer16 + i*tile_width0*ncn, 0,
|
icvCvt_BGRA2BGR_16u_C4C3R(buffer16 + i*tile_width0*ncn, 0,
|
||||||
|
@ -139,9 +139,6 @@ public:
|
|||||||
|
|
||||||
string filename = cv::tempfile(".jpg");
|
string filename = cv::tempfile(".jpg");
|
||||||
imwrite(filename, img);
|
imwrite(filename, img);
|
||||||
img = imread(filename, IMREAD_UNCHANGED);
|
|
||||||
|
|
||||||
filename = string(ts->get_data_path() + "readwrite/test_" + char(k + 48) + "_c" + char(num_channels + 48) + ".jpg");
|
|
||||||
ts->printf(ts->LOG, "reading test image : %s\n", filename.c_str());
|
ts->printf(ts->LOG, "reading test image : %s\n", filename.c_str());
|
||||||
Mat img_test = imread(filename, IMREAD_UNCHANGED);
|
Mat img_test = imread(filename, IMREAD_UNCHANGED);
|
||||||
|
|
||||||
@ -160,8 +157,9 @@ public:
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_TIFF
|
#ifdef HAVE_TIFF
|
||||||
for (int num_channels = 1; num_channels <= 3; num_channels+=2)
|
for (int num_channels = 1; num_channels <= 4; num_channels++)
|
||||||
{
|
{
|
||||||
|
if (num_channels == 2) continue;
|
||||||
// tiff
|
// tiff
|
||||||
ts->printf(ts->LOG, "image type depth:%d channels:%d ext: %s\n", CV_16U, num_channels, ".tiff");
|
ts->printf(ts->LOG, "image type depth:%d channels:%d ext: %s\n", CV_16U, num_channels, ".tiff");
|
||||||
Mat img(img_r * k, img_c * k, CV_MAKETYPE(CV_16U, num_channels), Scalar::all(0));
|
Mat img(img_r * k, img_c * k, CV_MAKETYPE(CV_16U, num_channels), Scalar::all(0));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user