mirror of
https://github.com/opencv/opencv.git
synced 2026-07-30 07:43:03 +04:00
Merge pull request #12192 from pasbi:pfm
* created new decoder and encoder for PFM pfm file format stores binary RGB or grayscale float images. * added test for pfm codec * replaced large with short licence header * little/big-endian-check is now compile time * fixed width/height confusion, improved big/little endian recognition, fixed scaling issue and Improved signature check * adapted tests to handle float images well * removed data-dependency: lena.pfm the lena image is now loaded is pam and converted to pfm. * fixed bug in endianess detection macro * Added endianess detection for android and win * removed fancy endianess detection endianess detection will be implemented in cmake scripts soonish. * fixed minor warnings * fixed stupid elif defined bug * silenced some implicit cast warnings * replaced std::to_string with std::stringstream solution std::to_string variant did not build on android. * replaced new endianess macros with existing ones * improved readability
This commit is contained in:
@@ -158,6 +158,7 @@ TEST_P(Imgcodecs_ExtSize, write_imageseq)
|
||||
|
||||
Mat img_gt(size, CV_MAKETYPE(CV_8U, cn), Scalar::all(0));
|
||||
circle(img_gt, center, radius, Scalar::all(255));
|
||||
|
||||
#if 1
|
||||
if (ext == ".pbm" || ext == ".pgm" || ext == ".ppm")
|
||||
{
|
||||
@@ -172,6 +173,7 @@ TEST_P(Imgcodecs_ExtSize, write_imageseq)
|
||||
EXPECT_EQ(img.type(), img.type());
|
||||
EXPECT_EQ(cn, img.channels());
|
||||
|
||||
|
||||
if (ext == ".jpg")
|
||||
{
|
||||
// JPEG format does not provide 100% accuracy
|
||||
@@ -181,14 +183,21 @@ TEST_P(Imgcodecs_ExtSize, write_imageseq)
|
||||
EXPECT_LT(n, expected);
|
||||
EXPECT_PRED_FORMAT2(cvtest::MatComparator(10, 0), img, img_gt);
|
||||
}
|
||||
else if (ext == ".pfm")
|
||||
{
|
||||
img_gt.convertTo(img_gt, CV_MAKETYPE(CV_32F, img.channels()));
|
||||
double n = cvtest::norm(img, img_gt, NORM_L2);
|
||||
EXPECT_LT(n, 1.);
|
||||
EXPECT_PRED_FORMAT2(cvtest::MatComparator(0, 0), img, img_gt);
|
||||
}
|
||||
else
|
||||
{
|
||||
double n = cvtest::norm(img, img_gt, NORM_L2);
|
||||
EXPECT_LT(n, 1.);
|
||||
EXPECT_PRED_FORMAT2(cvtest::MatComparator(0, 0), img, img_gt);
|
||||
}
|
||||
|
||||
#if 0
|
||||
std::cout << filename << std::endl;
|
||||
imshow("loaded", img);
|
||||
waitKey(0);
|
||||
#else
|
||||
@@ -214,7 +223,10 @@ const string all_exts[] =
|
||||
".ppm",
|
||||
".pgm",
|
||||
".pbm",
|
||||
".pnm"
|
||||
".pnm",
|
||||
#endif
|
||||
#ifdef HAVE_IMGCODEC_PFM
|
||||
".pfm",
|
||||
#endif
|
||||
};
|
||||
|
||||
@@ -337,6 +349,30 @@ TEST(Imgcodecs_Pam, read_write)
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_IMGCODEC_PFM
|
||||
TEST(Imgcodecs_Pfm, read_write)
|
||||
{
|
||||
Mat img = imread(findDataFile("readwrite/lena.pam"));
|
||||
ASSERT_FALSE(img.empty());
|
||||
img.convertTo(img, CV_32F, 1/255.0f);
|
||||
|
||||
std::vector<int> params;
|
||||
string writefile = cv::tempfile(".pfm");
|
||||
EXPECT_NO_THROW(cv::imwrite(writefile, img, params));
|
||||
cv::Mat reread = cv::imread(writefile, IMREAD_UNCHANGED);
|
||||
|
||||
string writefile_no_param = cv::tempfile(".pfm");
|
||||
EXPECT_NO_THROW(cv::imwrite(writefile_no_param, img));
|
||||
cv::Mat reread_no_param = cv::imread(writefile_no_param, IMREAD_UNCHANGED);
|
||||
|
||||
EXPECT_EQ(0, cvtest::norm(reread, reread_no_param, NORM_INF));
|
||||
EXPECT_EQ(0, cvtest::norm(img, reread, NORM_INF));
|
||||
|
||||
EXPECT_EQ(0, remove(writefile.c_str()));
|
||||
EXPECT_EQ(0, remove(writefile_no_param.c_str()));
|
||||
}
|
||||
#endif
|
||||
|
||||
TEST(Imgcodecs, write_parameter_type)
|
||||
{
|
||||
cv::Mat m(10, 10, CV_8UC1, cv::Scalar::all(0));
|
||||
|
||||
Reference in New Issue
Block a user