Path: blob/master/modules/imgcodecs/test/test_webp.cpp
16354 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_WEBP89TEST(Imgcodecs_WebP, encode_decode_lossless_webp)10{11const string root = cvtest::TS::ptr()->get_data_path();12string filename = root + "../cv/shared/lena.png";13cv::Mat img = cv::imread(filename);14ASSERT_FALSE(img.empty());1516string output = cv::tempfile(".webp");17EXPECT_NO_THROW(cv::imwrite(output, img)); // lossless1819cv::Mat img_webp = cv::imread(output);2021std::vector<unsigned char> buf;2223FILE * wfile = NULL;2425wfile = fopen(output.c_str(), "rb");26if (wfile != NULL)27{28fseek(wfile, 0, SEEK_END);29size_t wfile_size = ftell(wfile);30fseek(wfile, 0, SEEK_SET);3132buf.resize(wfile_size);3334size_t data_size = fread(&buf[0], 1, wfile_size, wfile);3536if(wfile)37{38fclose(wfile);39}4041if (data_size != wfile_size)42{43EXPECT_TRUE(false);44}45}4647EXPECT_EQ(0, remove(output.c_str()));4849cv::Mat decode = cv::imdecode(buf, IMREAD_COLOR);50ASSERT_FALSE(decode.empty());51EXPECT_TRUE(cvtest::norm(decode, img_webp, NORM_INF) == 0);5253ASSERT_FALSE(img_webp.empty());5455EXPECT_TRUE(cvtest::norm(img, img_webp, NORM_INF) == 0);56}5758TEST(Imgcodecs_WebP, encode_decode_lossy_webp)59{60const string root = cvtest::TS::ptr()->get_data_path();61std::string input = root + "../cv/shared/lena.png";62cv::Mat img = cv::imread(input);63ASSERT_FALSE(img.empty());6465for(int q = 100; q>=0; q-=20)66{67std::vector<int> params;68params.push_back(IMWRITE_WEBP_QUALITY);69params.push_back(q);70string output = cv::tempfile(".webp");7172EXPECT_NO_THROW(cv::imwrite(output, img, params));73cv::Mat img_webp = cv::imread(output);74EXPECT_EQ(0, remove(output.c_str()));75EXPECT_FALSE(img_webp.empty());76EXPECT_EQ(3, img_webp.channels());77EXPECT_EQ(512, img_webp.cols);78EXPECT_EQ(512, img_webp.rows);79}80}8182TEST(Imgcodecs_WebP, encode_decode_with_alpha_webp)83{84const string root = cvtest::TS::ptr()->get_data_path();85std::string input = root + "../cv/shared/lena.png";86cv::Mat img = cv::imread(input);87ASSERT_FALSE(img.empty());8889std::vector<cv::Mat> imgs;90cv::split(img, imgs);91imgs.push_back(cv::Mat(imgs[0]));92imgs[imgs.size() - 1] = cv::Scalar::all(128);93cv::merge(imgs, img);9495string output = cv::tempfile(".webp");9697EXPECT_NO_THROW(cv::imwrite(output, img));98cv::Mat img_webp = cv::imread(output, IMREAD_UNCHANGED);99cv::Mat img_webp_bgr = cv::imread(output); // IMREAD_COLOR by default100EXPECT_EQ(0, remove(output.c_str()));101EXPECT_FALSE(img_webp.empty());102EXPECT_EQ(4, img_webp.channels());103EXPECT_EQ(512, img_webp.cols);104EXPECT_EQ(512, img_webp.rows);105EXPECT_FALSE(img_webp_bgr.empty());106EXPECT_EQ(3, img_webp_bgr.channels());107EXPECT_EQ(512, img_webp_bgr.cols);108EXPECT_EQ(512, img_webp_bgr.rows);109}110111#endif // HAVE_WEBP112113}} // namespace114115116