123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- // This file is part of OpenCV project.
- // It is subject to the license terms in the LICENSE file found in the top-level directory
- // of this distribution and at http://opencv.org/license.html
- #include "test_precomp.hpp"
- namespace opencv_test { namespace {
- #ifdef HAVE_WEBP
- TEST(Imgcodecs_WebP, encode_decode_lossless_webp)
- {
- const string root = cvtest::TS::ptr()->get_data_path();
- string filename = root + "../cv/shared/lena.png";
- cv::Mat img = cv::imread(filename);
- ASSERT_FALSE(img.empty());
- string output = cv::tempfile(".webp");
- EXPECT_NO_THROW(cv::imwrite(output, img)); // lossless
- cv::Mat img_webp = cv::imread(output);
- std::vector<unsigned char> buf;
- FILE * wfile = NULL;
- wfile = fopen(output.c_str(), "rb");
- if (wfile != NULL)
- {
- fseek(wfile, 0, SEEK_END);
- size_t wfile_size = ftell(wfile);
- fseek(wfile, 0, SEEK_SET);
- buf.resize(wfile_size);
- size_t data_size = fread(&buf[0], 1, wfile_size, wfile);
- if(wfile)
- {
- fclose(wfile);
- }
- if (data_size != wfile_size)
- {
- EXPECT_TRUE(false);
- }
- }
- EXPECT_EQ(0, remove(output.c_str()));
- cv::Mat decode = cv::imdecode(buf, IMREAD_COLOR);
- ASSERT_FALSE(decode.empty());
- EXPECT_TRUE(cvtest::norm(decode, img_webp, NORM_INF) == 0);
- ASSERT_FALSE(img_webp.empty());
- EXPECT_TRUE(cvtest::norm(img, img_webp, NORM_INF) == 0);
- }
- TEST(Imgcodecs_WebP, encode_decode_lossy_webp)
- {
- const string root = cvtest::TS::ptr()->get_data_path();
- std::string input = root + "../cv/shared/lena.png";
- cv::Mat img = cv::imread(input);
- ASSERT_FALSE(img.empty());
- for(int q = 100; q>=0; q-=20)
- {
- std::vector<int> params;
- params.push_back(IMWRITE_WEBP_QUALITY);
- params.push_back(q);
- string output = cv::tempfile(".webp");
- EXPECT_NO_THROW(cv::imwrite(output, img, params));
- cv::Mat img_webp = cv::imread(output);
- EXPECT_EQ(0, remove(output.c_str()));
- EXPECT_FALSE(img_webp.empty());
- EXPECT_EQ(3, img_webp.channels());
- EXPECT_EQ(512, img_webp.cols);
- EXPECT_EQ(512, img_webp.rows);
- }
- }
- TEST(Imgcodecs_WebP, encode_decode_with_alpha_webp)
- {
- const string root = cvtest::TS::ptr()->get_data_path();
- std::string input = root + "../cv/shared/lena.png";
- cv::Mat img = cv::imread(input);
- ASSERT_FALSE(img.empty());
- std::vector<cv::Mat> imgs;
- cv::split(img, imgs);
- imgs.push_back(cv::Mat(imgs[0]));
- imgs[imgs.size() - 1] = cv::Scalar::all(128);
- cv::merge(imgs, img);
- string output = cv::tempfile(".webp");
- EXPECT_NO_THROW(cv::imwrite(output, img));
- cv::Mat img_webp = cv::imread(output, IMREAD_UNCHANGED);
- cv::Mat img_webp_bgr = cv::imread(output); // IMREAD_COLOR by default
- EXPECT_EQ(0, remove(output.c_str()));
- EXPECT_FALSE(img_webp.empty());
- EXPECT_EQ(4, img_webp.channels());
- EXPECT_EQ(512, img_webp.cols);
- EXPECT_EQ(512, img_webp.rows);
- EXPECT_FALSE(img_webp_bgr.empty());
- EXPECT_EQ(3, img_webp_bgr.channels());
- EXPECT_EQ(512, img_webp_bgr.cols);
- EXPECT_EQ(512, img_webp_bgr.rows);
- }
- #endif // HAVE_WEBP
- }} // namespace
|