Merge pull request #3694 from Ashod:jp2
This commit is contained in:
commit
caa03f72b7
1
3rdparty/libjasper/jas_cm.c
vendored
1
3rdparty/libjasper/jas_cm.c
vendored
@ -842,7 +842,6 @@ static int jas_cmshapmat_apply(jas_cmpxform_t *pxform, jas_cmreal_t *in,
|
|||||||
*dst++ = a2;
|
*dst++ = a2;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
assert(0);
|
|
||||||
while (--cnt >= 0) {
|
while (--cnt >= 0) {
|
||||||
a0 = *src++;
|
a0 = *src++;
|
||||||
src++;
|
src++;
|
||||||
|
7
3rdparty/libjasper/jas_stream.c
vendored
7
3rdparty/libjasper/jas_stream.c
vendored
@ -345,6 +345,7 @@ jas_stream_t *jas_stream_tmpfile()
|
|||||||
{
|
{
|
||||||
jas_stream_t *stream;
|
jas_stream_t *stream;
|
||||||
jas_stream_fileobj_t *obj;
|
jas_stream_fileobj_t *obj;
|
||||||
|
char *tmpname;
|
||||||
|
|
||||||
if (!(stream = jas_stream_create())) {
|
if (!(stream = jas_stream_create())) {
|
||||||
return 0;
|
return 0;
|
||||||
@ -365,10 +366,12 @@ jas_stream_t *jas_stream_tmpfile()
|
|||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
/* Choose a file name. */
|
/* Choose a file name. */
|
||||||
tmpnam(obj->pathname);
|
tmpname = tempnam(NULL, NULL);
|
||||||
|
strcpy(obj->pathname, tmpname);
|
||||||
|
free(tmpname);
|
||||||
|
|
||||||
/* Open the underlying file. */
|
/* Open the underlying file. */
|
||||||
if ((obj->fd = open(obj->pathname, O_CREAT | O_EXCL | O_RDWR | O_TRUNC | O_BINARY,
|
if ((obj->fd = open(obj->pathname, O_CREAT | O_EXCL | O_RDWR | O_TRUNC | O_BINARY | O_TEMPORARY | _O_SHORT_LIVED,
|
||||||
JAS_STREAM_PERMS)) < 0) {
|
JAS_STREAM_PERMS)) < 0) {
|
||||||
jas_stream_destroy(stream);
|
jas_stream_destroy(stream);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -45,6 +45,7 @@
|
|||||||
#ifdef HAVE_JASPER
|
#ifdef HAVE_JASPER
|
||||||
|
|
||||||
#include "grfmt_jpeg2000.hpp"
|
#include "grfmt_jpeg2000.hpp"
|
||||||
|
#include "opencv2/imgproc.hpp"
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
#define JAS_WIN_MSVC_BUILD 1
|
#define JAS_WIN_MSVC_BUILD 1
|
||||||
@ -159,6 +160,21 @@ bool Jpeg2KDecoder::readData( Mat& img )
|
|||||||
jas_stream_t* stream = (jas_stream_t*)m_stream;
|
jas_stream_t* stream = (jas_stream_t*)m_stream;
|
||||||
jas_image_t* image = (jas_image_t*)m_image;
|
jas_image_t* image = (jas_image_t*)m_image;
|
||||||
|
|
||||||
|
#ifndef WIN32
|
||||||
|
// At least on some Linux instances the
|
||||||
|
// system libjasper segfaults when
|
||||||
|
// converting color to grey.
|
||||||
|
// We do this conversion manually at the end.
|
||||||
|
Mat clr;
|
||||||
|
if (CV_MAT_CN(img.type()) < CV_MAT_CN(this->type()))
|
||||||
|
{
|
||||||
|
clr.create(img.size().height, img.size().width, this->type());
|
||||||
|
color = true;
|
||||||
|
data = clr.ptr();
|
||||||
|
step = (int)clr.step;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if( stream && image )
|
if( stream && image )
|
||||||
{
|
{
|
||||||
bool convert;
|
bool convert;
|
||||||
@ -171,7 +187,7 @@ bool Jpeg2KDecoder::readData( Mat& img )
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
convert = (jas_clrspc_fam( jas_image_clrspc( image ) ) != JAS_CLRSPC_FAM_GRAY);
|
convert = (jas_clrspc_fam( jas_image_clrspc( image ) ) != JAS_CLRSPC_FAM_GRAY);
|
||||||
colorspace = JAS_CLRSPC_SGRAY; // TODO GENGRAY or SGRAY?
|
colorspace = JAS_CLRSPC_SGRAY; // TODO GENGRAY or SGRAY? (GENGRAY fails on Win.)
|
||||||
}
|
}
|
||||||
|
|
||||||
// convert to the desired colorspace
|
// convert to the desired colorspace
|
||||||
@ -256,6 +272,13 @@ bool Jpeg2KDecoder::readData( Mat& img )
|
|||||||
|
|
||||||
close();
|
close();
|
||||||
|
|
||||||
|
#ifndef WIN32
|
||||||
|
if (!clr.empty())
|
||||||
|
{
|
||||||
|
cv::cvtColor(clr, img, COLOR_BGR2GRAY);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -374,15 +374,8 @@ imreadmulti_(const String& filename, int flags, std::vector<Mat>& mats)
|
|||||||
type = CV_MAKETYPE(CV_MAT_DEPTH(type), 1);
|
type = CV_MAKETYPE(CV_MAT_DEPTH(type), 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// established the required input image size.
|
|
||||||
CvSize size;
|
|
||||||
size.width = decoder->width();
|
|
||||||
size.height = decoder->height();
|
|
||||||
|
|
||||||
Mat mat;
|
|
||||||
mat.create(size.height, size.width, type);
|
|
||||||
|
|
||||||
// read the image data
|
// read the image data
|
||||||
|
Mat mat(decoder->height(), decoder->width(), type);
|
||||||
if (!decoder->readData(mat))
|
if (!decoder->readData(mat))
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
|
@ -87,6 +87,9 @@ TEST(Imgcodecs_imread, regression)
|
|||||||
{
|
{
|
||||||
const char* const filenames[] =
|
const char* const filenames[] =
|
||||||
{
|
{
|
||||||
|
#ifdef HAVE_JASPER
|
||||||
|
"Rome.jp2",
|
||||||
|
#endif
|
||||||
"color_palette_alpha.png",
|
"color_palette_alpha.png",
|
||||||
"multipage.tif",
|
"multipage.tif",
|
||||||
"rle.hdr",
|
"rle.hdr",
|
||||||
@ -99,16 +102,32 @@ TEST(Imgcodecs_imread, regression)
|
|||||||
|
|
||||||
for (size_t i = 0; i < sizeof(filenames) / sizeof(filenames[0]); ++i)
|
for (size_t i = 0; i < sizeof(filenames) / sizeof(filenames[0]); ++i)
|
||||||
{
|
{
|
||||||
ASSERT_TRUE(imread_compare(folder + string(filenames[i]), IMREAD_UNCHANGED));
|
const string path = folder + string(filenames[i]);
|
||||||
ASSERT_TRUE(imread_compare(folder + string(filenames[i]), IMREAD_GRAYSCALE));
|
ASSERT_TRUE(imread_compare(path, IMREAD_UNCHANGED));
|
||||||
ASSERT_TRUE(imread_compare(folder + string(filenames[i]), IMREAD_COLOR));
|
ASSERT_TRUE(imread_compare(path, IMREAD_GRAYSCALE));
|
||||||
ASSERT_TRUE(imread_compare(folder + string(filenames[i]), IMREAD_ANYDEPTH));
|
ASSERT_TRUE(imread_compare(path, IMREAD_COLOR));
|
||||||
ASSERT_TRUE(imread_compare(folder + string(filenames[i]), IMREAD_ANYCOLOR));
|
ASSERT_TRUE(imread_compare(path, IMREAD_ANYDEPTH));
|
||||||
if (i != 2) // GDAL does not support hdr
|
ASSERT_TRUE(imread_compare(path, IMREAD_ANYCOLOR));
|
||||||
ASSERT_TRUE(imread_compare(folder + string(filenames[i]), IMREAD_LOAD_GDAL));
|
if (path.substr(path.length() - 3) != "hdr")
|
||||||
|
{
|
||||||
|
// GDAL does not support hdr
|
||||||
|
ASSERT_TRUE(imread_compare(path, IMREAD_LOAD_GDAL));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_JASPER
|
||||||
|
TEST(Imgcodecs_jasper, regression)
|
||||||
|
{
|
||||||
|
const string folder = string(cvtest::TS::ptr()->get_data_path()) + "/readwrite/";
|
||||||
|
|
||||||
|
ASSERT_TRUE(imread_compare(folder + "Bretagne2.jp2", IMREAD_COLOR));
|
||||||
|
ASSERT_TRUE(imread_compare(folder + "Bretagne2.jp2", IMREAD_GRAYSCALE));
|
||||||
|
ASSERT_TRUE(imread_compare(folder + "Grey.jp2", IMREAD_COLOR));
|
||||||
|
ASSERT_TRUE(imread_compare(folder + "Grey.jp2", IMREAD_GRAYSCALE));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
class CV_GrfmtWriteBigImageTest : public cvtest::BaseTest
|
class CV_GrfmtWriteBigImageTest : public cvtest::BaseTest
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user