Path: blob/master/modules/imgcodecs/test/test_png.cpp
16344 views
// This file is part of OpenCV project.1// It is subject to the license terms in the LICENSE file found in the top-level directory2// of this distribution and at http://opencv.org/license.html3#include "test_precomp.hpp"45namespace opencv_test { namespace {67#ifdef HAVE_PNG89TEST(Imgcodecs_Png, write_big)10{11const string root = cvtest::TS::ptr()->get_data_path();12const string filename = root + "readwrite/read.png";13const string dst_file = cv::tempfile(".png");14Mat img;15ASSERT_NO_THROW(img = imread(filename));16ASSERT_FALSE(img.empty());17EXPECT_EQ(13043, img.cols);18EXPECT_EQ(13917, img.rows);19ASSERT_NO_THROW(imwrite(dst_file, img));20EXPECT_EQ(0, remove(dst_file.c_str()));21}2223TEST(Imgcodecs_Png, encode)24{25vector<uchar> buff;26Mat img_gt = Mat::zeros(1000, 1000, CV_8U);27vector<int> param;28param.push_back(IMWRITE_PNG_COMPRESSION);29param.push_back(3); //default(3) 0-9.30EXPECT_NO_THROW(imencode(".png", img_gt, buff, param));31Mat img;32EXPECT_NO_THROW(img = imdecode(buff, IMREAD_ANYDEPTH)); // hang33EXPECT_FALSE(img.empty());34EXPECT_PRED_FORMAT2(cvtest::MatComparator(0, 0), img, img_gt);35}3637TEST(Imgcodecs_Png, regression_ImreadVSCvtColor)38{39const string root = cvtest::TS::ptr()->get_data_path();40const string imgName = root + "../cv/shared/lena.png";41Mat original_image = imread(imgName);42Mat gray_by_codec = imread(imgName, IMREAD_GRAYSCALE);43Mat gray_by_cvt;44cvtColor(original_image, gray_by_cvt, CV_BGR2GRAY);4546Mat diff;47absdiff(gray_by_codec, gray_by_cvt, diff);48EXPECT_LT(cvtest::mean(diff)[0], 1.);49EXPECT_PRED_FORMAT2(cvtest::MatComparator(10, 0), gray_by_codec, gray_by_cvt);50}5152// Test OpenCV issue 3075 is solved53TEST(Imgcodecs_Png, read_color_palette_with_alpha)54{55const string root = cvtest::TS::ptr()->get_data_path();56Mat img;5758// First Test : Read PNG with alpha, imread flag -159img = imread(root + "readwrite/color_palette_alpha.png", IMREAD_UNCHANGED);60ASSERT_FALSE(img.empty());61ASSERT_TRUE(img.channels() == 4);6263// pixel is red in BGRA64EXPECT_EQ(img.at<Vec4b>(0, 0), Vec4b(0, 0, 255, 255));65EXPECT_EQ(img.at<Vec4b>(0, 1), Vec4b(0, 0, 255, 255));6667// Second Test : Read PNG without alpha, imread flag -168img = imread(root + "readwrite/color_palette_no_alpha.png", IMREAD_UNCHANGED);69ASSERT_FALSE(img.empty());70ASSERT_TRUE(img.channels() == 3);7172// pixel is red in BGR73EXPECT_EQ(img.at<Vec3b>(0, 0), Vec3b(0, 0, 255));74EXPECT_EQ(img.at<Vec3b>(0, 1), Vec3b(0, 0, 255));7576// Third Test : Read PNG with alpha, imread flag 177img = imread(root + "readwrite/color_palette_alpha.png", IMREAD_COLOR);78ASSERT_FALSE(img.empty());79ASSERT_TRUE(img.channels() == 3);8081// pixel is red in BGR82EXPECT_EQ(img.at<Vec3b>(0, 0), Vec3b(0, 0, 255));83EXPECT_EQ(img.at<Vec3b>(0, 1), Vec3b(0, 0, 255));8485// Fourth Test : Read PNG without alpha, imread flag 186img = imread(root + "readwrite/color_palette_no_alpha.png", IMREAD_COLOR);87ASSERT_FALSE(img.empty());88ASSERT_TRUE(img.channels() == 3);8990// pixel is red in BGR91EXPECT_EQ(img.at<Vec3b>(0, 0), Vec3b(0, 0, 255));92EXPECT_EQ(img.at<Vec3b>(0, 1), Vec3b(0, 0, 255));93}9495#endif // HAVE_PNG9697}} // namespace9899100