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) 2010-2012, Multicoreware, Inc., all rights reserved. 14 // Copyright (C) 2010-2012, Advanced Micro Devices, Inc., all rights reserved. 15 // Third party copyrights are property of their respective owners. 16 // 17 // @Authors 18 // Peng Xiao, pengxiao (at) multicorewareinc.com 19 // 20 // Redistribution and use in source and binary forms, with or without modification, 21 // are permitted provided that the following conditions are met: 22 // 23 // * Redistribution's of source code must retain the above copyright notice, 24 // this list of conditions and the following disclaimer. 25 // 26 // * Redistribution's in binary form must reproduce the above copyright notice, 27 // this list of conditions and the following disclaimer in the documentation 28 // and/or other materials provided with the distribution. 29 // 30 // * The name of the copyright holders may not be used to endorse or promote products 31 // derived from this software without specific prior written permission. 32 // 33 // This software is provided by the copyright holders and contributors as is and 34 // any express or implied warranties, including, but not limited to, the implied 35 // warranties of merchantability and fitness for a particular purpose are disclaimed. 36 // In no event shall the Intel Corporation or contributors be liable for any direct, 37 // indirect, incidental, special, exemplary, or consequential damages 38 // (including, but not limited to, procurement of substitute goods or services; 39 // loss of use, data, or profits; or business interruption) however caused 40 // and on any theory of liability, whether in contract, strict liability, 41 // or tort (including negligence or otherwise) arising in any way out of 42 // the use of this software, even if advised of the possibility of such damage. 43 // 44 //M*/ 45 46 #include "../test_precomp.hpp" 47 #include "opencv2/ts/ocl_test.hpp" 48 49 #ifdef HAVE_OPENCL 50 51 namespace cvtest { 52 namespace ocl { 53 54 //////////////////////////////////////////////////////// 55 // Canny 56 57 IMPLEMENT_PARAM_CLASS(AppertureSize, int) 58 IMPLEMENT_PARAM_CLASS(L2gradient, bool) 59 IMPLEMENT_PARAM_CLASS(UseRoi, bool) 60 61 PARAM_TEST_CASE(Canny, Channels, AppertureSize, L2gradient, UseRoi) 62 { 63 int cn, apperture_size; 64 bool useL2gradient, use_roi; 65 66 TEST_DECLARE_INPUT_PARAMETER(src); 67 TEST_DECLARE_OUTPUT_PARAMETER(dst); 68 69 virtual void SetUp() 70 { 71 cn = GET_PARAM(0); 72 apperture_size = GET_PARAM(1); 73 useL2gradient = GET_PARAM(2); 74 use_roi = GET_PARAM(3); 75 } 76 77 void generateTestData() 78 { 79 Mat img = readImageType("shared/fruits.png", CV_8UC(cn)); 80 ASSERT_FALSE(img.empty()) << "cann't load shared/fruits.png"; 81 82 Size roiSize = img.size(); 83 int type = img.type(); 84 85 Border srcBorder = randomBorder(0, use_roi ? MAX_VALUE : 0); 86 randomSubMat(src, src_roi, roiSize, srcBorder, type, 2, 100); 87 img.copyTo(src_roi); 88 89 Border dstBorder = randomBorder(0, use_roi ? MAX_VALUE : 0); 90 randomSubMat(dst, dst_roi, roiSize, dstBorder, type, 5, 16); 91 92 UMAT_UPLOAD_INPUT_PARAMETER(src); 93 UMAT_UPLOAD_OUTPUT_PARAMETER(dst); 94 } 95 }; 96 97 OCL_TEST_P(Canny, Accuracy) 98 { 99 generateTestData(); 100 101 const double low_thresh = 50.0, high_thresh = 100.0; 102 double eps = 1e-2; 103 #ifdef ANDROID 104 if (cv::ocl::Device::getDefault().isNVidia()) 105 eps = 12e-3; 106 #endif 107 108 OCL_OFF(cv::Canny(src_roi, dst_roi, low_thresh, high_thresh, apperture_size, useL2gradient)); 109 OCL_ON(cv::Canny(usrc_roi, udst_roi, low_thresh, high_thresh, apperture_size, useL2gradient)); 110 111 EXPECT_MAT_SIMILAR(dst_roi, udst_roi, eps); 112 EXPECT_MAT_SIMILAR(dst, udst, eps); 113 } 114 115 OCL_INSTANTIATE_TEST_CASE_P(ImgProc, Canny, testing::Combine( 116 testing::Values(1, 3), 117 testing::Values(AppertureSize(3), AppertureSize(5)), 118 testing::Values(L2gradient(false), L2gradient(true)), 119 testing::Values(UseRoi(false), UseRoi(true)))); 120 121 } } // namespace cvtest::ocl 122 123 #endif // HAVE_OPENCL 124