Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Tetragramm
GitHub Repository: Tetragramm/opencv
Path: blob/master/modules/imgcodecs/test/test_png.cpp
16344 views
1
// This file is part of OpenCV project.
2
// It is subject to the license terms in the LICENSE file found in the top-level directory
3
// of this distribution and at http://opencv.org/license.html
4
#include "test_precomp.hpp"
5
6
namespace opencv_test { namespace {
7
8
#ifdef HAVE_PNG
9
10
TEST(Imgcodecs_Png, write_big)
11
{
12
const string root = cvtest::TS::ptr()->get_data_path();
13
const string filename = root + "readwrite/read.png";
14
const string dst_file = cv::tempfile(".png");
15
Mat img;
16
ASSERT_NO_THROW(img = imread(filename));
17
ASSERT_FALSE(img.empty());
18
EXPECT_EQ(13043, img.cols);
19
EXPECT_EQ(13917, img.rows);
20
ASSERT_NO_THROW(imwrite(dst_file, img));
21
EXPECT_EQ(0, remove(dst_file.c_str()));
22
}
23
24
TEST(Imgcodecs_Png, encode)
25
{
26
vector<uchar> buff;
27
Mat img_gt = Mat::zeros(1000, 1000, CV_8U);
28
vector<int> param;
29
param.push_back(IMWRITE_PNG_COMPRESSION);
30
param.push_back(3); //default(3) 0-9.
31
EXPECT_NO_THROW(imencode(".png", img_gt, buff, param));
32
Mat img;
33
EXPECT_NO_THROW(img = imdecode(buff, IMREAD_ANYDEPTH)); // hang
34
EXPECT_FALSE(img.empty());
35
EXPECT_PRED_FORMAT2(cvtest::MatComparator(0, 0), img, img_gt);
36
}
37
38
TEST(Imgcodecs_Png, regression_ImreadVSCvtColor)
39
{
40
const string root = cvtest::TS::ptr()->get_data_path();
41
const string imgName = root + "../cv/shared/lena.png";
42
Mat original_image = imread(imgName);
43
Mat gray_by_codec = imread(imgName, IMREAD_GRAYSCALE);
44
Mat gray_by_cvt;
45
cvtColor(original_image, gray_by_cvt, CV_BGR2GRAY);
46
47
Mat diff;
48
absdiff(gray_by_codec, gray_by_cvt, diff);
49
EXPECT_LT(cvtest::mean(diff)[0], 1.);
50
EXPECT_PRED_FORMAT2(cvtest::MatComparator(10, 0), gray_by_codec, gray_by_cvt);
51
}
52
53
// Test OpenCV issue 3075 is solved
54
TEST(Imgcodecs_Png, read_color_palette_with_alpha)
55
{
56
const string root = cvtest::TS::ptr()->get_data_path();
57
Mat img;
58
59
// First Test : Read PNG with alpha, imread flag -1
60
img = imread(root + "readwrite/color_palette_alpha.png", IMREAD_UNCHANGED);
61
ASSERT_FALSE(img.empty());
62
ASSERT_TRUE(img.channels() == 4);
63
64
// pixel is red in BGRA
65
EXPECT_EQ(img.at<Vec4b>(0, 0), Vec4b(0, 0, 255, 255));
66
EXPECT_EQ(img.at<Vec4b>(0, 1), Vec4b(0, 0, 255, 255));
67
68
// Second Test : Read PNG without alpha, imread flag -1
69
img = imread(root + "readwrite/color_palette_no_alpha.png", IMREAD_UNCHANGED);
70
ASSERT_FALSE(img.empty());
71
ASSERT_TRUE(img.channels() == 3);
72
73
// pixel is red in BGR
74
EXPECT_EQ(img.at<Vec3b>(0, 0), Vec3b(0, 0, 255));
75
EXPECT_EQ(img.at<Vec3b>(0, 1), Vec3b(0, 0, 255));
76
77
// Third Test : Read PNG with alpha, imread flag 1
78
img = imread(root + "readwrite/color_palette_alpha.png", IMREAD_COLOR);
79
ASSERT_FALSE(img.empty());
80
ASSERT_TRUE(img.channels() == 3);
81
82
// pixel is red in BGR
83
EXPECT_EQ(img.at<Vec3b>(0, 0), Vec3b(0, 0, 255));
84
EXPECT_EQ(img.at<Vec3b>(0, 1), Vec3b(0, 0, 255));
85
86
// Fourth Test : Read PNG without alpha, imread flag 1
87
img = imread(root + "readwrite/color_palette_no_alpha.png", IMREAD_COLOR);
88
ASSERT_FALSE(img.empty());
89
ASSERT_TRUE(img.channels() == 3);
90
91
// pixel is red in BGR
92
EXPECT_EQ(img.at<Vec3b>(0, 0), Vec3b(0, 0, 255));
93
EXPECT_EQ(img.at<Vec3b>(0, 1), Vec3b(0, 0, 255));
94
}
95
96
#endif // HAVE_PNG
97
98
}} // namespace
99
100