1 /*M/////////////////////////////////////////////////////////////////////////////////////// 2 // 3 // IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. 4 // 5 // By downloading, copying, installing or using the software you agree to this license. 6 // If you do not agree to this license, do not download, install, 7 // copy or use the software. 8 // 9 // 10 // License Agreement 11 // For Open Source Computer Vision Library 12 // 13 // Copyright (C) 2013, OpenCV Foundation, all rights reserved. 14 // Third party copyrights are property of their respective owners. 15 // 16 // Redistribution and use in source and binary forms, with or without modification, 17 // are permitted provided that the following conditions are met: 18 // 19 // * Redistribution's of source code must retain the above copyright notice, 20 // this list of conditions and the following disclaimer. 21 // 22 // * Redistribution's in binary form must reproduce the above copyright notice, 23 // this list of conditions and the following disclaimer in the documentation 24 // and/or other materials provided with the distribution. 25 // 26 // * The name of the copyright holders may not be used to endorse or promote products 27 // derived from this software without specific prior written permission. 28 // 29 // This software is provided by the copyright holders and contributors "as is" and 30 // any express or implied warranties, including, but not limited to, the implied 31 // warranties of merchantability and fitness for a particular purpose are disclaimed. 32 // In no event shall the Intel Corporation or contributors be liable for any direct, 33 // indirect, incidental, special, exemplary, or consequential damages 34 // (including, but not limited to, procurement of substitute goods or services; 35 // loss of use, data, or profits; or business interruption) however caused 36 // and on any theory of liability, whether in contract, strict liability, 37 // or tort (including negligence or otherwise) arising in any way out of 38 // the use of this software, even if advised of the possibility of such damage. 39 // 40 //M*/ 41 42 43 #include "test_precomp.hpp" 44 #include "opencv2/photo.hpp" 45 #include <string> 46 47 using namespace cv; 48 using namespace std; 49 50 static const double numerical_precision = 100.; 51 52 TEST(Photo_NPR_EdgePreserveSmoothing_RecursiveFilter, regression) 53 { 54 string folder = string(cvtest::TS::ptr()->get_data_path()) + "npr/"; 55 string original_path = folder + "test1.png"; 56 57 Mat source = imread(original_path, IMREAD_COLOR); 58 59 ASSERT_FALSE(source.empty()) << "Could not load input image " << original_path; 60 61 Mat result; 62 edgePreservingFilter(source,result,1); 63 64 Mat reference = imread(folder + "smoothened_RF_reference.png"); 65 double error = cvtest::norm(reference, result, NORM_L1); 66 EXPECT_LE(error, numerical_precision); 67 } 68 69 TEST(Photo_NPR_EdgePreserveSmoothing_NormConvFilter, regression) 70 { 71 string folder = string(cvtest::TS::ptr()->get_data_path()) + "npr/"; 72 string original_path = folder + "test1.png"; 73 74 Mat source = imread(original_path, IMREAD_COLOR); 75 76 ASSERT_FALSE(source.empty()) << "Could not load input image " << original_path; 77 78 Mat result; 79 edgePreservingFilter(source,result,2); 80 81 Mat reference = imread(folder + "smoothened_NCF_reference.png"); 82 double error = cvtest::norm(reference, result, NORM_L1); 83 EXPECT_LE(error, numerical_precision); 84 85 } 86 87 TEST(Photo_NPR_DetailEnhance, regression) 88 { 89 string folder = string(cvtest::TS::ptr()->get_data_path()) + "npr/"; 90 string original_path = folder + "test1.png"; 91 92 Mat source = imread(original_path, IMREAD_COLOR); 93 94 ASSERT_FALSE(source.empty()) << "Could not load input image " << original_path; 95 96 Mat result; 97 detailEnhance(source,result); 98 99 Mat reference = imread(folder + "detail_enhanced_reference.png"); 100 double error = cvtest::norm(reference, result, NORM_L1); 101 EXPECT_LE(error, numerical_precision); 102 } 103 104 TEST(Photo_NPR_PencilSketch, regression) 105 { 106 string folder = string(cvtest::TS::ptr()->get_data_path()) + "npr/"; 107 string original_path = folder + "test1.png"; 108 109 Mat source = imread(original_path, IMREAD_COLOR); 110 111 ASSERT_FALSE(source.empty()) << "Could not load input image " << original_path; 112 113 Mat pencil_result, color_pencil_result; 114 pencilSketch(source,pencil_result, color_pencil_result, 10, 0.1f, 0.03f); 115 116 Mat pencil_reference = imread(folder + "pencil_sketch_reference.png", 0 /* == grayscale*/); 117 double pencil_error = norm(pencil_reference, pencil_result, NORM_L1); 118 EXPECT_LE(pencil_error, numerical_precision); 119 120 Mat color_pencil_reference = imread(folder + "color_pencil_sketch_reference.png"); 121 double color_pencil_error = cvtest::norm(color_pencil_reference, color_pencil_result, NORM_L1); 122 EXPECT_LE(color_pencil_error, numerical_precision); 123 } 124 125 TEST(Photo_NPR_Stylization, regression) 126 { 127 string folder = string(cvtest::TS::ptr()->get_data_path()) + "npr/"; 128 string original_path = folder + "test1.png"; 129 130 Mat source = imread(original_path, IMREAD_COLOR); 131 132 ASSERT_FALSE(source.empty()) << "Could not load input image " << original_path; 133 134 Mat result; 135 stylization(source,result); 136 137 Mat stylized_reference = imread(folder + "stylized_reference.png"); 138 double stylized_error = cvtest::norm(stylized_reference, result, NORM_L1); 139 EXPECT_LE(stylized_error, numerical_precision); 140 141 } 142