| 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) 2000-2008, Intel Corporation, all rights reserved. |
| 14 | // Copyright (C) 2008-2012, Willow Garage Inc., all rights reserved. |
| 15 | // Third party copyrights are property of their respective owners. |
| 16 | // |
| 17 | // Redistribution and use in source and binary forms, with or without modification, |
| 18 | // are permitted provided that the following conditions are met: |
| 19 | // |
| 20 | // * Redistribution's of source code must retain the above copyright notice, |
| 21 | // this list of conditions and the following disclaimer. |
| 22 | // |
| 23 | // * Redistribution's in binary form must reproduce the above copyright notice, |
| 24 | // this list of conditions and the following disclaimer in the documentation |
| 25 | // and/or other materials provided with the distribution. |
| 26 | // |
| 27 | // * The name of the copyright holders may not be used to endorse or promote products |
| 28 | // derived from this software without specific prior written permission. |
| 29 | // |
| 30 | // This software is provided by the copyright holders and contributors "as is" and |
| 31 | // any express or implied warranties, including, but not limited to, the implied |
| 32 | // warranties of merchantability and fitness for a particular purpose are disclaimed. |
| 33 | // In no event shall the Intel Corporation or contributors be liable for any direct, |
| 34 | // indirect, incidental, special, exemplary, or consequential damages |
| 35 | // (including, but not limited to, procurement of substitute goods or services; |
| 36 | // loss of use, data, or profits; or business interruption) however caused |
| 37 | // and on any theory of liability, whether in contract, strict liability, |
| 38 | // or tort (including negligence or otherwise) arising in any way out of |
| 39 | // the use of this software, even if advised of the possibility of such damage. |
| 40 | // |
| 41 | //M*/ |
| 42 | |
| 43 | #ifndef OPENCV_PHOTO_HPP |
| 44 | #define OPENCV_PHOTO_HPP |
| 45 | |
| 46 | #include "opencv2/core.hpp" |
| 47 | #include "opencv2/imgproc.hpp" |
| 48 | |
| 49 | /** |
| 50 | @defgroup photo Computational Photography |
| 51 | |
| 52 | This module includes photo processing algorithms |
| 53 | @{ |
| 54 | @defgroup photo_inpaint Inpainting |
| 55 | @defgroup photo_denoise Denoising |
| 56 | @defgroup photo_hdr HDR imaging |
| 57 | |
| 58 | This section describes high dynamic range imaging algorithms namely tonemapping, exposure alignment, |
| 59 | camera calibration with multiple exposures and exposure fusion. |
| 60 | |
| 61 | @defgroup photo_decolor Contrast Preserving Decolorization |
| 62 | |
| 63 | Useful links: |
| 64 | |
| 65 | http://www.cse.cuhk.edu.hk/leojia/projects/color2gray/index.html |
| 66 | |
| 67 | @defgroup photo_clone Seamless Cloning |
| 68 | |
| 69 | Useful links: |
| 70 | |
| 71 | https://www.learnopencv.com/seamless-cloning-using-opencv-python-cpp |
| 72 | |
| 73 | @defgroup photo_render Non-Photorealistic Rendering |
| 74 | |
| 75 | Useful links: |
| 76 | |
| 77 | http://www.inf.ufrgs.br/~eslgastal/DomainTransform |
| 78 | |
| 79 | https://www.learnopencv.com/non-photorealistic-rendering-using-opencv-python-c/ |
| 80 | |
| 81 | @} |
| 82 | */ |
| 83 | |
| 84 | namespace cv |
| 85 | { |
| 86 | |
| 87 | //! @addtogroup photo |
| 88 | //! @{ |
| 89 | |
| 90 | //! @addtogroup photo_inpaint |
| 91 | //! @{ |
| 92 | //! the inpainting algorithm |
| 93 | enum |
| 94 | { |
| 95 | INPAINT_NS = 0, //!< Use Navier-Stokes based method |
| 96 | INPAINT_TELEA = 1 //!< Use the algorithm proposed by Alexandru Telea @cite Telea04 |
| 97 | }; |
| 98 | |
| 99 | /** @brief Restores the selected region in an image using the region neighborhood. |
| 100 | |
| 101 | @param src Input 8-bit, 16-bit unsigned or 32-bit float 1-channel or 8-bit 3-channel image. |
| 102 | @param inpaintMask Inpainting mask, 8-bit 1-channel image. Non-zero pixels indicate the area that |
| 103 | needs to be inpainted. |
| 104 | @param dst Output image with the same size and type as src . |
| 105 | @param inpaintRadius Radius of a circular neighborhood of each point inpainted that is considered |
| 106 | by the algorithm. |
| 107 | @param flags Inpainting method that could be cv::INPAINT_NS or cv::INPAINT_TELEA |
| 108 | |
| 109 | The function reconstructs the selected image area from the pixel near the area boundary. The |
| 110 | function may be used to remove dust and scratches from a scanned photo, or to remove undesirable |
| 111 | objects from still images or video. See <http://en.wikipedia.org/wiki/Inpainting> for more details. |
| 112 | |
| 113 | @note |
| 114 | - An example using the inpainting technique can be found at |
| 115 | opencv_source_code/samples/cpp/inpaint.cpp |
| 116 | - (Python) An example using the inpainting technique can be found at |
| 117 | opencv_source_code/samples/python/inpaint.py |
| 118 | */ |
| 119 | CV_EXPORTS_W void inpaint( InputArray src, InputArray inpaintMask, |
| 120 | OutputArray dst, double inpaintRadius, int flags ); |
| 121 | |
| 122 | //! @} photo_inpaint |
| 123 | |
| 124 | //! @addtogroup photo_denoise |
| 125 | //! @{ |
| 126 | |
| 127 | /** @brief Perform image denoising using Non-local Means Denoising algorithm |
| 128 | <http://www.ipol.im/pub/algo/bcm_non_local_means_denoising/> with several computational |
| 129 | optimizations. Noise expected to be a gaussian white noise |
| 130 | |
| 131 | @param src Input 8-bit 1-channel, 2-channel, 3-channel or 4-channel image. |
| 132 | @param dst Output image with the same size and type as src . |
| 133 | @param templateWindowSize Size in pixels of the template patch that is used to compute weights. |
| 134 | Should be odd. Recommended value 7 pixels |
| 135 | @param searchWindowSize Size in pixels of the window that is used to compute weighted average for |
| 136 | given pixel. Should be odd. Affect performance linearly: greater searchWindowsSize - greater |
| 137 | denoising time. Recommended value 21 pixels |
| 138 | @param h Parameter regulating filter strength. Big h value perfectly removes noise but also |
| 139 | removes image details, smaller h value preserves details but also preserves some noise |
| 140 | |
| 141 | This function expected to be applied to grayscale images. For colored images look at |
| 142 | fastNlMeansDenoisingColored. Advanced usage of this functions can be manual denoising of colored |
| 143 | image in different colorspaces. Such approach is used in fastNlMeansDenoisingColored by converting |
| 144 | image to CIELAB colorspace and then separately denoise L and AB components with different h |
| 145 | parameter. |
| 146 | */ |
| 147 | CV_EXPORTS_W void fastNlMeansDenoising( InputArray src, OutputArray dst, float h = 3, |
| 148 | int templateWindowSize = 7, int searchWindowSize = 21); |
| 149 | |
| 150 | /** @brief Perform image denoising using Non-local Means Denoising algorithm |
| 151 | <http://www.ipol.im/pub/algo/bcm_non_local_means_denoising/> with several computational |
| 152 | optimizations. Noise expected to be a gaussian white noise |
| 153 | |
| 154 | @param src Input 8-bit or 16-bit (only with NORM_L1) 1-channel, |
| 155 | 2-channel, 3-channel or 4-channel image. |
| 156 | @param dst Output image with the same size and type as src . |
| 157 | @param templateWindowSize Size in pixels of the template patch that is used to compute weights. |
| 158 | Should be odd. Recommended value 7 pixels |
| 159 | @param searchWindowSize Size in pixels of the window that is used to compute weighted average for |
| 160 | given pixel. Should be odd. Affect performance linearly: greater searchWindowsSize - greater |
| 161 | denoising time. Recommended value 21 pixels |
| 162 | @param h Array of parameters regulating filter strength, either one |
| 163 | parameter applied to all channels or one per channel in dst. Big h value |
| 164 | perfectly removes noise but also removes image details, smaller h |
| 165 | value preserves details but also preserves some noise |
| 166 | @param normType Type of norm used for weight calculation. Can be either NORM_L2 or NORM_L1 |
| 167 | |
| 168 | This function expected to be applied to grayscale images. For colored images look at |
| 169 | fastNlMeansDenoisingColored. Advanced usage of this functions can be manual denoising of colored |
| 170 | image in different colorspaces. Such approach is used in fastNlMeansDenoisingColored by converting |
| 171 | image to CIELAB colorspace and then separately denoise L and AB components with different h |
| 172 | parameter. |
| 173 | */ |
| 174 | CV_EXPORTS_W void fastNlMeansDenoising( InputArray src, OutputArray dst, |
| 175 | const std::vector<float>& h, |
| 176 | int templateWindowSize = 7, int searchWindowSize = 21, |
| 177 | int normType = NORM_L2); |
| 178 | |
| 179 | /** @brief Modification of fastNlMeansDenoising function for colored images |
| 180 | |
| 181 | @param src Input 8-bit 3-channel image. |
| 182 | @param dst Output image with the same size and type as src . |
| 183 | @param templateWindowSize Size in pixels of the template patch that is used to compute weights. |
| 184 | Should be odd. Recommended value 7 pixels |
| 185 | @param searchWindowSize Size in pixels of the window that is used to compute weighted average for |
| 186 | given pixel. Should be odd. Affect performance linearly: greater searchWindowsSize - greater |
| 187 | denoising time. Recommended value 21 pixels |
| 188 | @param h Parameter regulating filter strength for luminance component. Bigger h value perfectly |
| 189 | removes noise but also removes image details, smaller h value preserves details but also preserves |
| 190 | some noise |
| 191 | @param hColor The same as h but for color components. For most images value equals 10 |
| 192 | will be enough to remove colored noise and do not distort colors |
| 193 | |
| 194 | The function converts image to CIELAB colorspace and then separately denoise L and AB components |
| 195 | with given h parameters using fastNlMeansDenoising function. |
| 196 | */ |
| 197 | CV_EXPORTS_W void fastNlMeansDenoisingColored( InputArray src, OutputArray dst, |
| 198 | float h = 3, float hColor = 3, |
| 199 | int templateWindowSize = 7, int searchWindowSize = 21); |
| 200 | |
| 201 | /** @brief Modification of fastNlMeansDenoising function for images sequence where consecutive images have been |
| 202 | captured in small period of time. For example video. This version of the function is for grayscale |
| 203 | images or for manual manipulation with colorspaces. See @cite Buades2005DenoisingIS for more details |
| 204 | (open access [here](https://static.aminer.org/pdf/PDF/000/317/196/spatio_temporal_wiener_filtering_of_image_sequences_using_a_parametric.pdf)). |
| 205 | |
| 206 | @param srcImgs Input 8-bit 1-channel, 2-channel, 3-channel or |
| 207 | 4-channel images sequence. All images should have the same type and |
| 208 | size. |
| 209 | @param imgToDenoiseIndex Target image to denoise index in srcImgs sequence |
| 210 | @param temporalWindowSize Number of surrounding images to use for target image denoising. Should |
| 211 | be odd. Images from imgToDenoiseIndex - temporalWindowSize / 2 to |
| 212 | imgToDenoiseIndex + temporalWindowSize / 2 from srcImgs will be used to denoise |
| 213 | srcImgs[imgToDenoiseIndex] image. |
| 214 | @param dst Output image with the same size and type as srcImgs images. |
| 215 | @param templateWindowSize Size in pixels of the template patch that is used to compute weights. |
| 216 | Should be odd. Recommended value 7 pixels |
| 217 | @param searchWindowSize Size in pixels of the window that is used to compute weighted average for |
| 218 | given pixel. Should be odd. Affect performance linearly: greater searchWindowsSize - greater |
| 219 | denoising time. Recommended value 21 pixels |
| 220 | @param h Parameter regulating filter strength. Bigger h value |
| 221 | perfectly removes noise but also removes image details, smaller h |
| 222 | value preserves details but also preserves some noise |
| 223 | */ |
| 224 | CV_EXPORTS_W void fastNlMeansDenoisingMulti( InputArrayOfArrays srcImgs, OutputArray dst, |
| 225 | int imgToDenoiseIndex, int temporalWindowSize, |
| 226 | float h = 3, int templateWindowSize = 7, int searchWindowSize = 21); |
| 227 | |
| 228 | /** @brief Modification of fastNlMeansDenoising function for images sequence where consecutive images have been |
| 229 | captured in small period of time. For example video. This version of the function is for grayscale |
| 230 | images or for manual manipulation with colorspaces. See @cite Buades2005DenoisingIS for more details |
| 231 | (open access [here](https://static.aminer.org/pdf/PDF/000/317/196/spatio_temporal_wiener_filtering_of_image_sequences_using_a_parametric.pdf)). |
| 232 | |
| 233 | @param srcImgs Input 8-bit or 16-bit (only with NORM_L1) 1-channel, |
| 234 | 2-channel, 3-channel or 4-channel images sequence. All images should |
| 235 | have the same type and size. |
| 236 | @param imgToDenoiseIndex Target image to denoise index in srcImgs sequence |
| 237 | @param temporalWindowSize Number of surrounding images to use for target image denoising. Should |
| 238 | be odd. Images from imgToDenoiseIndex - temporalWindowSize / 2 to |
| 239 | imgToDenoiseIndex + temporalWindowSize / 2 from srcImgs will be used to denoise |
| 240 | srcImgs[imgToDenoiseIndex] image. |
| 241 | @param dst Output image with the same size and type as srcImgs images. |
| 242 | @param templateWindowSize Size in pixels of the template patch that is used to compute weights. |
| 243 | Should be odd. Recommended value 7 pixels |
| 244 | @param searchWindowSize Size in pixels of the window that is used to compute weighted average for |
| 245 | given pixel. Should be odd. Affect performance linearly: greater searchWindowsSize - greater |
| 246 | denoising time. Recommended value 21 pixels |
| 247 | @param h Array of parameters regulating filter strength, either one |
| 248 | parameter applied to all channels or one per channel in dst. Big h value |
| 249 | perfectly removes noise but also removes image details, smaller h |
| 250 | value preserves details but also preserves some noise |
| 251 | @param normType Type of norm used for weight calculation. Can be either NORM_L2 or NORM_L1 |
| 252 | */ |
| 253 | CV_EXPORTS_W void fastNlMeansDenoisingMulti( InputArrayOfArrays srcImgs, OutputArray dst, |
| 254 | int imgToDenoiseIndex, int temporalWindowSize, |
| 255 | const std::vector<float>& h, |
| 256 | int templateWindowSize = 7, int searchWindowSize = 21, |
| 257 | int normType = NORM_L2); |
| 258 | |
| 259 | /** @brief Modification of fastNlMeansDenoisingMulti function for colored images sequences |
| 260 | |
| 261 | @param srcImgs Input 8-bit 3-channel images sequence. All images should have the same type and |
| 262 | size. |
| 263 | @param imgToDenoiseIndex Target image to denoise index in srcImgs sequence |
| 264 | @param temporalWindowSize Number of surrounding images to use for target image denoising. Should |
| 265 | be odd. Images from imgToDenoiseIndex - temporalWindowSize / 2 to |
| 266 | imgToDenoiseIndex + temporalWindowSize / 2 from srcImgs will be used to denoise |
| 267 | srcImgs[imgToDenoiseIndex] image. |
| 268 | @param dst Output image with the same size and type as srcImgs images. |
| 269 | @param templateWindowSize Size in pixels of the template patch that is used to compute weights. |
| 270 | Should be odd. Recommended value 7 pixels |
| 271 | @param searchWindowSize Size in pixels of the window that is used to compute weighted average for |
| 272 | given pixel. Should be odd. Affect performance linearly: greater searchWindowsSize - greater |
| 273 | denoising time. Recommended value 21 pixels |
| 274 | @param h Parameter regulating filter strength for luminance component. Bigger h value perfectly |
| 275 | removes noise but also removes image details, smaller h value preserves details but also preserves |
| 276 | some noise. |
| 277 | @param hColor The same as h but for color components. |
| 278 | |
| 279 | The function converts images to CIELAB colorspace and then separately denoise L and AB components |
| 280 | with given h parameters using fastNlMeansDenoisingMulti function. |
| 281 | */ |
| 282 | CV_EXPORTS_W void fastNlMeansDenoisingColoredMulti( InputArrayOfArrays srcImgs, OutputArray dst, |
| 283 | int imgToDenoiseIndex, int temporalWindowSize, |
| 284 | float h = 3, float hColor = 3, |
| 285 | int templateWindowSize = 7, int searchWindowSize = 21); |
| 286 | |
| 287 | /** @brief Primal-dual algorithm is an algorithm for solving special types of variational problems (that is, |
| 288 | finding a function to minimize some functional). As the image denoising, in particular, may be seen |
| 289 | as the variational problem, primal-dual algorithm then can be used to perform denoising and this is |
| 290 | exactly what is implemented. |
| 291 | |
| 292 | It should be noted, that this implementation was taken from the July 2013 blog entry |
| 293 | @cite MA13 , which also contained (slightly more general) ready-to-use source code on Python. |
| 294 | Subsequently, that code was rewritten on C++ with the usage of openCV by Vadim Pisarevsky at the end |
| 295 | of July 2013 and finally it was slightly adapted by later authors. |
| 296 | |
| 297 | Although the thorough discussion and justification of the algorithm involved may be found in |
| 298 | @cite ChambolleEtAl, it might make sense to skim over it here, following @cite MA13 . To begin |
| 299 | with, we consider the 1-byte gray-level images as the functions from the rectangular domain of |
| 300 | pixels (it may be seen as set |
| 301 | \f$\left\{(x,y)\in\mathbb{N}\times\mathbb{N}\mid 1\leq x\leq n,\;1\leq y\leq m\right\}\f$ for some |
| 302 | \f$m,\;n\in\mathbb{N}\f$) into \f$\{0,1,\dots,255\}\f$. We shall denote the noised images as \f$f_i\f$ and with |
| 303 | this view, given some image \f$x\f$ of the same size, we may measure how bad it is by the formula |
| 304 | |
| 305 | \f[\left\|\left\|\nabla x\right\|\right\| + \lambda\sum_i\left\|\left\|x-f_i\right\|\right\|\f] |
| 306 | |
| 307 | \f$\|\|\cdot\|\|\f$ here denotes \f$L_2\f$-norm and as you see, the first addend states that we want our |
| 308 | image to be smooth (ideally, having zero gradient, thus being constant) and the second states that |
| 309 | we want our result to be close to the observations we've got. If we treat \f$x\f$ as a function, this is |
| 310 | exactly the functional what we seek to minimize and here the Primal-Dual algorithm comes into play. |
| 311 | |
| 312 | @param observations This array should contain one or more noised versions of the image that is to |
| 313 | be restored. |
| 314 | @param result Here the denoised image will be stored. There is no need to do pre-allocation of |
| 315 | storage space, as it will be automatically allocated, if necessary. |
| 316 | @param lambda Corresponds to \f$\lambda\f$ in the formulas above. As it is enlarged, the smooth |
| 317 | (blurred) images are treated more favorably than detailed (but maybe more noised) ones. Roughly |
| 318 | speaking, as it becomes smaller, the result will be more blur but more sever outliers will be |
| 319 | removed. |
| 320 | @param niters Number of iterations that the algorithm will run. Of course, as more iterations as |
| 321 | better, but it is hard to quantitatively refine this statement, so just use the default and |
| 322 | increase it if the results are poor. |
| 323 | */ |
| 324 | CV_EXPORTS_W void denoise_TVL1(const std::vector<Mat>& observations,Mat& result, double lambda=1.0, int niters=30); |
| 325 | |
| 326 | //! @} photo_denoise |
| 327 | |
| 328 | //! @addtogroup photo_hdr |
| 329 | //! @{ |
| 330 | |
| 331 | enum { LDR_SIZE = 256 }; |
| 332 | |
| 333 | /** @brief Base class for tonemapping algorithms - tools that are used to map HDR image to 8-bit range. |
| 334 | */ |
| 335 | class CV_EXPORTS_W Tonemap : public Algorithm |
| 336 | { |
| 337 | public: |
| 338 | /** @brief Tonemaps image |
| 339 | |
| 340 | @param src source image - CV_32FC3 Mat (float 32 bits 3 channels) |
| 341 | @param dst destination image - CV_32FC3 Mat with values in [0, 1] range |
| 342 | */ |
| 343 | CV_WRAP virtual void process(InputArray src, OutputArray dst) = 0; |
| 344 | |
| 345 | CV_WRAP virtual float getGamma() const = 0; |
| 346 | CV_WRAP virtual void setGamma(float gamma) = 0; |
| 347 | }; |
| 348 | |
| 349 | /** @brief Creates simple linear mapper with gamma correction |
| 350 | |
| 351 | @param gamma positive value for gamma correction. Gamma value of 1.0 implies no correction, gamma |
| 352 | equal to 2.2f is suitable for most displays. |
| 353 | Generally gamma \> 1 brightens the image and gamma \< 1 darkens it. |
| 354 | */ |
| 355 | CV_EXPORTS_W Ptr<Tonemap> createTonemap(float gamma = 1.0f); |
| 356 | |
| 357 | /** @brief Adaptive logarithmic mapping is a fast global tonemapping algorithm that scales the image in |
| 358 | logarithmic domain. |
| 359 | |
| 360 | Since it's a global operator the same function is applied to all the pixels, it is controlled by the |
| 361 | bias parameter. |
| 362 | |
| 363 | Optional saturation enhancement is possible as described in @cite FL02 . |
| 364 | |
| 365 | For more information see @cite DM03 . |
| 366 | */ |
| 367 | class CV_EXPORTS_W TonemapDrago : public Tonemap |
| 368 | { |
| 369 | public: |
| 370 | |
| 371 | CV_WRAP virtual float getSaturation() const = 0; |
| 372 | CV_WRAP virtual void setSaturation(float saturation) = 0; |
| 373 | |
| 374 | CV_WRAP virtual float getBias() const = 0; |
| 375 | CV_WRAP virtual void setBias(float bias) = 0; |
| 376 | }; |
| 377 | |
| 378 | /** @brief Creates TonemapDrago object |
| 379 | |
| 380 | @param gamma gamma value for gamma correction. See createTonemap |
| 381 | @param saturation positive saturation enhancement value. 1.0 preserves saturation, values greater |
| 382 | than 1 increase saturation and values less than 1 decrease it. |
| 383 | @param bias value for bias function in [0, 1] range. Values from 0.7 to 0.9 usually give best |
| 384 | results, default value is 0.85. |
| 385 | */ |
| 386 | CV_EXPORTS_W Ptr<TonemapDrago> createTonemapDrago(float gamma = 1.0f, float saturation = 1.0f, float bias = 0.85f); |
| 387 | |
| 388 | |
| 389 | /** @brief This is a global tonemapping operator that models human visual system. |
| 390 | |
| 391 | Mapping function is controlled by adaptation parameter, that is computed using light adaptation and |
| 392 | color adaptation. |
| 393 | |
| 394 | For more information see @cite RD05 . |
| 395 | */ |
| 396 | class CV_EXPORTS_W TonemapReinhard : public Tonemap |
| 397 | { |
| 398 | public: |
| 399 | CV_WRAP virtual float getIntensity() const = 0; |
| 400 | CV_WRAP virtual void setIntensity(float intensity) = 0; |
| 401 | |
| 402 | CV_WRAP virtual float getLightAdaptation() const = 0; |
| 403 | CV_WRAP virtual void setLightAdaptation(float light_adapt) = 0; |
| 404 | |
| 405 | CV_WRAP virtual float getColorAdaptation() const = 0; |
| 406 | CV_WRAP virtual void setColorAdaptation(float color_adapt) = 0; |
| 407 | }; |
| 408 | |
| 409 | /** @brief Creates TonemapReinhard object |
| 410 | |
| 411 | @param gamma gamma value for gamma correction. See createTonemap |
| 412 | @param intensity result intensity in [-8, 8] range. Greater intensity produces brighter results. |
| 413 | @param light_adapt light adaptation in [0, 1] range. If 1 adaptation is based only on pixel |
| 414 | value, if 0 it's global, otherwise it's a weighted mean of this two cases. |
| 415 | @param color_adapt chromatic adaptation in [0, 1] range. If 1 channels are treated independently, |
| 416 | if 0 adaptation level is the same for each channel. |
| 417 | */ |
| 418 | CV_EXPORTS_W Ptr<TonemapReinhard> |
| 419 | createTonemapReinhard(float gamma = 1.0f, float intensity = 0.0f, float light_adapt = 1.0f, float color_adapt = 0.0f); |
| 420 | |
| 421 | /** @brief This algorithm transforms image to contrast using gradients on all levels of gaussian pyramid, |
| 422 | transforms contrast values to HVS response and scales the response. After this the image is |
| 423 | reconstructed from new contrast values. |
| 424 | |
| 425 | For more information see @cite MM06 . |
| 426 | */ |
| 427 | class CV_EXPORTS_W TonemapMantiuk : public Tonemap |
| 428 | { |
| 429 | public: |
| 430 | CV_WRAP virtual float getScale() const = 0; |
| 431 | CV_WRAP virtual void setScale(float scale) = 0; |
| 432 | |
| 433 | CV_WRAP virtual float getSaturation() const = 0; |
| 434 | CV_WRAP virtual void setSaturation(float saturation) = 0; |
| 435 | }; |
| 436 | |
| 437 | /** @brief Creates TonemapMantiuk object |
| 438 | |
| 439 | @param gamma gamma value for gamma correction. See createTonemap |
| 440 | @param scale contrast scale factor. HVS response is multiplied by this parameter, thus compressing |
| 441 | dynamic range. Values from 0.6 to 0.9 produce best results. |
| 442 | @param saturation saturation enhancement value. See createTonemapDrago |
| 443 | */ |
| 444 | CV_EXPORTS_W Ptr<TonemapMantiuk> |
| 445 | createTonemapMantiuk(float gamma = 1.0f, float scale = 0.7f, float saturation = 1.0f); |
| 446 | |
| 447 | /** @brief The base class for algorithms that align images of the same scene with different exposures |
| 448 | */ |
| 449 | class CV_EXPORTS_W AlignExposures : public Algorithm |
| 450 | { |
| 451 | public: |
| 452 | /** @brief Aligns images |
| 453 | |
| 454 | @param src vector of input images |
| 455 | @param dst vector of aligned images |
| 456 | @param times vector of exposure time values for each image |
| 457 | @param response 256x1 matrix with inverse camera response function for each pixel value, it should |
| 458 | have the same number of channels as images. |
| 459 | */ |
| 460 | CV_WRAP virtual void process(InputArrayOfArrays src, std::vector<Mat>& dst, |
| 461 | InputArray times, InputArray response) = 0; |
| 462 | }; |
| 463 | |
| 464 | /** @brief This algorithm converts images to median threshold bitmaps (1 for pixels brighter than median |
| 465 | luminance and 0 otherwise) and than aligns the resulting bitmaps using bit operations. |
| 466 | |
| 467 | It is invariant to exposure, so exposure values and camera response are not necessary. |
| 468 | |
| 469 | In this implementation new image regions are filled with zeros. |
| 470 | |
| 471 | For more information see @cite GW03 . |
| 472 | */ |
| 473 | class CV_EXPORTS_W AlignMTB : public AlignExposures |
| 474 | { |
| 475 | public: |
| 476 | CV_WRAP virtual void process(InputArrayOfArrays src, std::vector<Mat>& dst, |
| 477 | InputArray times, InputArray response) CV_OVERRIDE = 0; |
| 478 | |
| 479 | /** @brief Short version of process, that doesn't take extra arguments. |
| 480 | |
| 481 | @param src vector of input images |
| 482 | @param dst vector of aligned images |
| 483 | */ |
| 484 | CV_WRAP virtual void process(InputArrayOfArrays src, std::vector<Mat>& dst) = 0; |
| 485 | |
| 486 | /** @brief Calculates shift between two images, i. e. how to shift the second image to correspond it with the |
| 487 | first. |
| 488 | |
| 489 | @param img0 first image |
| 490 | @param img1 second image |
| 491 | */ |
| 492 | CV_WRAP virtual Point calculateShift(InputArray img0, InputArray img1) = 0; |
| 493 | /** @brief Helper function, that shift Mat filling new regions with zeros. |
| 494 | |
| 495 | @param src input image |
| 496 | @param dst result image |
| 497 | @param shift shift value |
| 498 | */ |
| 499 | CV_WRAP virtual void shiftMat(InputArray src, OutputArray dst, const Point shift) = 0; |
| 500 | /** @brief Computes median threshold and exclude bitmaps of given image. |
| 501 | |
| 502 | @param img input image |
| 503 | @param tb median threshold bitmap |
| 504 | @param eb exclude bitmap |
| 505 | */ |
| 506 | CV_WRAP virtual void computeBitmaps(InputArray img, OutputArray tb, OutputArray eb) = 0; |
| 507 | |
| 508 | CV_WRAP virtual int getMaxBits() const = 0; |
| 509 | CV_WRAP virtual void setMaxBits(int max_bits) = 0; |
| 510 | |
| 511 | CV_WRAP virtual int getExcludeRange() const = 0; |
| 512 | CV_WRAP virtual void setExcludeRange(int exclude_range) = 0; |
| 513 | |
| 514 | CV_WRAP virtual bool getCut() const = 0; |
| 515 | CV_WRAP virtual void setCut(bool value) = 0; |
| 516 | }; |
| 517 | |
| 518 | /** @brief Creates AlignMTB object |
| 519 | |
| 520 | @param max_bits logarithm to the base 2 of maximal shift in each dimension. Values of 5 and 6 are |
| 521 | usually good enough (31 and 63 pixels shift respectively). |
| 522 | @param exclude_range range for exclusion bitmap that is constructed to suppress noise around the |
| 523 | median value. |
| 524 | @param cut if true cuts images, otherwise fills the new regions with zeros. |
| 525 | */ |
| 526 | CV_EXPORTS_W Ptr<AlignMTB> createAlignMTB(int max_bits = 6, int exclude_range = 4, bool cut = true); |
| 527 | |
| 528 | /** @brief The base class for camera response calibration algorithms. |
| 529 | */ |
| 530 | class CV_EXPORTS_W CalibrateCRF : public Algorithm |
| 531 | { |
| 532 | public: |
| 533 | /** @brief Recovers inverse camera response. |
| 534 | |
| 535 | @param src vector of input images |
| 536 | @param dst 256x1 matrix with inverse camera response function |
| 537 | @param times vector of exposure time values for each image |
| 538 | */ |
| 539 | CV_WRAP virtual void process(InputArrayOfArrays src, OutputArray dst, InputArray times) = 0; |
| 540 | }; |
| 541 | |
| 542 | /** @brief Inverse camera response function is extracted for each brightness value by minimizing an objective |
| 543 | function as linear system. Objective function is constructed using pixel values on the same position |
| 544 | in all images, extra term is added to make the result smoother. |
| 545 | |
| 546 | For more information see @cite DM97 . |
| 547 | */ |
| 548 | class CV_EXPORTS_W CalibrateDebevec : public CalibrateCRF |
| 549 | { |
| 550 | public: |
| 551 | CV_WRAP virtual float getLambda() const = 0; |
| 552 | CV_WRAP virtual void setLambda(float lambda) = 0; |
| 553 | |
| 554 | CV_WRAP virtual int getSamples() const = 0; |
| 555 | CV_WRAP virtual void setSamples(int samples) = 0; |
| 556 | |
| 557 | CV_WRAP virtual bool getRandom() const = 0; |
| 558 | CV_WRAP virtual void setRandom(bool random) = 0; |
| 559 | }; |
| 560 | |
| 561 | /** @brief Creates CalibrateDebevec object |
| 562 | |
| 563 | @param samples number of pixel locations to use |
| 564 | @param lambda smoothness term weight. Greater values produce smoother results, but can alter the |
| 565 | response. |
| 566 | @param random if true sample pixel locations are chosen at random, otherwise they form a |
| 567 | rectangular grid. |
| 568 | */ |
| 569 | CV_EXPORTS_W Ptr<CalibrateDebevec> createCalibrateDebevec(int samples = 70, float lambda = 10.0f, bool random = false); |
| 570 | |
| 571 | /** @brief Inverse camera response function is extracted for each brightness value by minimizing an objective |
| 572 | function as linear system. This algorithm uses all image pixels. |
| 573 | |
| 574 | For more information see @cite RB99 . |
| 575 | */ |
| 576 | class CV_EXPORTS_W CalibrateRobertson : public CalibrateCRF |
| 577 | { |
| 578 | public: |
| 579 | CV_WRAP virtual int getMaxIter() const = 0; |
| 580 | CV_WRAP virtual void setMaxIter(int max_iter) = 0; |
| 581 | |
| 582 | CV_WRAP virtual float getThreshold() const = 0; |
| 583 | CV_WRAP virtual void setThreshold(float threshold) = 0; |
| 584 | |
| 585 | CV_WRAP virtual Mat getRadiance() const = 0; |
| 586 | }; |
| 587 | |
| 588 | /** @brief Creates CalibrateRobertson object |
| 589 | |
| 590 | @param max_iter maximal number of Gauss-Seidel solver iterations. |
| 591 | @param threshold target difference between results of two successive steps of the minimization. |
| 592 | */ |
| 593 | CV_EXPORTS_W Ptr<CalibrateRobertson> createCalibrateRobertson(int max_iter = 30, float threshold = 0.01f); |
| 594 | |
| 595 | /** @brief The base class algorithms that can merge exposure sequence to a single image. |
| 596 | */ |
| 597 | class CV_EXPORTS_W MergeExposures : public Algorithm |
| 598 | { |
| 599 | public: |
| 600 | /** @brief Merges images. |
| 601 | |
| 602 | @param src vector of input images |
| 603 | @param dst result image |
| 604 | @param times vector of exposure time values for each image |
| 605 | @param response 256x1 matrix with inverse camera response function for each pixel value, it should |
| 606 | have the same number of channels as images. |
| 607 | */ |
| 608 | CV_WRAP virtual void process(InputArrayOfArrays src, OutputArray dst, |
| 609 | InputArray times, InputArray response) = 0; |
| 610 | }; |
| 611 | |
| 612 | /** @brief The resulting HDR image is calculated as weighted average of the exposures considering exposure |
| 613 | values and camera response. |
| 614 | |
| 615 | For more information see @cite DM97 . |
| 616 | */ |
| 617 | class CV_EXPORTS_W MergeDebevec : public MergeExposures |
| 618 | { |
| 619 | public: |
| 620 | CV_WRAP virtual void process(InputArrayOfArrays src, OutputArray dst, |
| 621 | InputArray times, InputArray response) CV_OVERRIDE = 0; |
| 622 | CV_WRAP virtual void process(InputArrayOfArrays src, OutputArray dst, InputArray times) = 0; |
| 623 | }; |
| 624 | |
| 625 | /** @brief Creates MergeDebevec object |
| 626 | */ |
| 627 | CV_EXPORTS_W Ptr<MergeDebevec> createMergeDebevec(); |
| 628 | |
| 629 | /** @brief Pixels are weighted using contrast, saturation and well-exposedness measures, than images are |
| 630 | combined using laplacian pyramids. |
| 631 | |
| 632 | The resulting image weight is constructed as weighted average of contrast, saturation and |
| 633 | well-exposedness measures. |
| 634 | |
| 635 | The resulting image doesn't require tonemapping and can be converted to 8-bit image by multiplying |
| 636 | by 255, but it's recommended to apply gamma correction and/or linear tonemapping. |
| 637 | |
| 638 | For more information see @cite MK07 . |
| 639 | */ |
| 640 | class CV_EXPORTS_W MergeMertens : public MergeExposures |
| 641 | { |
| 642 | public: |
| 643 | CV_WRAP virtual void process(InputArrayOfArrays src, OutputArray dst, |
| 644 | InputArray times, InputArray response) CV_OVERRIDE = 0; |
| 645 | /** @brief Short version of process, that doesn't take extra arguments. |
| 646 | |
| 647 | @param src vector of input images |
| 648 | @param dst result image |
| 649 | */ |
| 650 | CV_WRAP virtual void process(InputArrayOfArrays src, OutputArray dst) = 0; |
| 651 | |
| 652 | CV_WRAP virtual float getContrastWeight() const = 0; |
| 653 | CV_WRAP virtual void setContrastWeight(float contrast_weiht) = 0; |
| 654 | |
| 655 | CV_WRAP virtual float getSaturationWeight() const = 0; |
| 656 | CV_WRAP virtual void setSaturationWeight(float saturation_weight) = 0; |
| 657 | |
| 658 | CV_WRAP virtual float getExposureWeight() const = 0; |
| 659 | CV_WRAP virtual void setExposureWeight(float exposure_weight) = 0; |
| 660 | }; |
| 661 | |
| 662 | /** @brief Creates MergeMertens object |
| 663 | |
| 664 | @param contrast_weight contrast measure weight. See MergeMertens. |
| 665 | @param saturation_weight saturation measure weight |
| 666 | @param exposure_weight well-exposedness measure weight |
| 667 | */ |
| 668 | CV_EXPORTS_W Ptr<MergeMertens> |
| 669 | createMergeMertens(float contrast_weight = 1.0f, float saturation_weight = 1.0f, float exposure_weight = 0.0f); |
| 670 | |
| 671 | /** @brief The resulting HDR image is calculated as weighted average of the exposures considering exposure |
| 672 | values and camera response. |
| 673 | |
| 674 | For more information see @cite RB99 . |
| 675 | */ |
| 676 | class CV_EXPORTS_W MergeRobertson : public MergeExposures |
| 677 | { |
| 678 | public: |
| 679 | CV_WRAP virtual void process(InputArrayOfArrays src, OutputArray dst, |
| 680 | InputArray times, InputArray response) CV_OVERRIDE = 0; |
| 681 | CV_WRAP virtual void process(InputArrayOfArrays src, OutputArray dst, InputArray times) = 0; |
| 682 | }; |
| 683 | |
| 684 | /** @brief Creates MergeRobertson object |
| 685 | */ |
| 686 | CV_EXPORTS_W Ptr<MergeRobertson> createMergeRobertson(); |
| 687 | |
| 688 | //! @} photo_hdr |
| 689 | |
| 690 | //! @addtogroup photo_decolor |
| 691 | //! @{ |
| 692 | |
| 693 | /** @brief Transforms a color image to a grayscale image. It is a basic tool in digital printing, stylized |
| 694 | black-and-white photograph rendering, and in many single channel image processing applications |
| 695 | @cite CL12 . |
| 696 | |
| 697 | @param src Input 8-bit 3-channel image. |
| 698 | @param grayscale Output 8-bit 1-channel image. |
| 699 | @param color_boost Output 8-bit 3-channel image. |
| 700 | |
| 701 | This function is to be applied on color images. |
| 702 | */ |
| 703 | CV_EXPORTS_W void decolor( InputArray src, OutputArray grayscale, OutputArray color_boost); |
| 704 | |
| 705 | //! @} photo_decolor |
| 706 | |
| 707 | //! @addtogroup photo_clone |
| 708 | //! @{ |
| 709 | |
| 710 | |
| 711 | //! Flags for the seamlessClone algorithm |
| 712 | enum SeamlessCloneFlags |
| 713 | { |
| 714 | /** |
| 715 | @brief Normal seamless cloning. |
| 716 | This method is ideal for inserting objects with complex outlines into a new background. |
| 717 | It preserves the original appearance and lighting of the inserted object, ensuring a natural blend. |
| 718 | */ |
| 719 | NORMAL_CLONE = 1, |
| 720 | |
| 721 | /** |
| 722 | @brief Mixed seamless cloning. |
| 723 | This method addresses cases where simple color-based selection or alpha masking is time-consuming |
| 724 | and may result in undesirable halos. By combining structure from the source and texture from the |
| 725 | destination, mixed seamless cloning is highly effective, even with loosely defined selections. |
| 726 | */ |
| 727 | MIXED_CLONE = 2, |
| 728 | |
| 729 | /** |
| 730 | @brief Monochrome transfer cloning. |
| 731 | This method allows users to replace specific features of an object, such as grayscale textures |
| 732 | or patterns, with alternative features. It is particularly useful for artistic effects or |
| 733 | targeted object modifications. |
| 734 | */ |
| 735 | MONOCHROME_TRANSFER = 3, |
| 736 | |
| 737 | /** |
| 738 | @brief Enhanced normal seamless cloning. |
| 739 | Similar to `NORMAL_CLONE`, but with an advanced approach to ROI (Region of Interest) calculation. |
| 740 | This mode processes a larger source region by considering the entire mask area instead of only |
| 741 | the bounding rectangle of non-zero pixels. |
| 742 | */ |
| 743 | NORMAL_CLONE_WIDE = 9, |
| 744 | |
| 745 | /** |
| 746 | @brief Enhanced mixed seamless cloning. |
| 747 | Similar to `MIXED_CLONE`, but with an advanced approach to ROI (Region of Interest) calculation. |
| 748 | This mode processes a larger source region by considering the entire mask area instead of only |
| 749 | the bounding rectangle of non-zero pixels. |
| 750 | */ |
| 751 | MIXED_CLONE_WIDE = 10, |
| 752 | |
| 753 | /** |
| 754 | @brief Enhanced monochrome transfer cloning. |
| 755 | Similar to `MONOCHROME_TRANSFER`, but with an advanced approach to ROI (Region of Interest) calculation. |
| 756 | This mode processes a larger source region by considering the entire mask area instead of only |
| 757 | the bounding rectangle of non-zero pixels. |
| 758 | */ |
| 759 | MONOCHROME_TRANSFER_WIDE = 11 |
| 760 | }; |
| 761 | |
| 762 | |
| 763 | /** @example samples/cpp/tutorial_code/photo/seamless_cloning/cloning_demo.cpp |
| 764 | An example using seamlessClone function |
| 765 | */ |
| 766 | /** @brief Performs seamless cloning to blend a region from a source image into a destination image. |
| 767 | This function is designed for local image editing, allowing changes restricted to a region |
| 768 | (manually selected as the ROI) to be applied effortlessly and seamlessly. These changes can |
| 769 | range from slight distortions to complete replacement by novel content @cite PM03. |
| 770 | |
| 771 | @param src The source image (8-bit 3-channel), from which a region will be blended into the destination. |
| 772 | @param dst The destination image (8-bit 3-channel), where the src image will be blended. |
| 773 | @param mask A binary mask (8-bit, 1, 3, or 4-channel) specifying the region in the source image to blend. |
| 774 | Non-zero pixels indicate the region to be blended. If an empty Mat is provided, a mask with |
| 775 | all non-zero pixels is created internally. |
| 776 | @param p The point where the center of the src image is placed in the dst image. |
| 777 | @param blend The output image that stores the result of the seamless cloning. It has the same size and type as `dst`. |
| 778 | @param flags Flags that control the type of cloning method, can take values of `cv::SeamlessCloneFlags`. |
| 779 | */ |
| 780 | CV_EXPORTS_W void seamlessClone( InputArray src, InputArray dst, InputArray mask, Point p, |
| 781 | OutputArray blend, int flags); |
| 782 | |
| 783 | /** @brief Given an original color image, two differently colored versions of this image can be mixed |
| 784 | seamlessly. |
| 785 | |
| 786 | @param src Input 8-bit 3-channel image. |
| 787 | @param mask Input 8-bit 1 or 3-channel image. |
| 788 | @param dst Output image with the same size and type as src . |
| 789 | @param red_mul R-channel multiply factor. |
| 790 | @param green_mul G-channel multiply factor. |
| 791 | @param blue_mul B-channel multiply factor. |
| 792 | |
| 793 | Multiplication factor is between .5 to 2.5. |
| 794 | */ |
| 795 | CV_EXPORTS_W void colorChange(InputArray src, InputArray mask, OutputArray dst, float red_mul = 1.0f, |
| 796 | float green_mul = 1.0f, float blue_mul = 1.0f); |
| 797 | |
| 798 | /** @brief Applying an appropriate non-linear transformation to the gradient field inside the selection and |
| 799 | then integrating back with a Poisson solver, modifies locally the apparent illumination of an image. |
| 800 | |
| 801 | @param src Input 8-bit 3-channel image. |
| 802 | @param mask Input 8-bit 1 or 3-channel image. |
| 803 | @param dst Output image with the same size and type as src. |
| 804 | @param alpha Value ranges between 0-2. |
| 805 | @param beta Value ranges between 0-2. |
| 806 | |
| 807 | This is useful to highlight under-exposed foreground objects or to reduce specular reflections. |
| 808 | */ |
| 809 | CV_EXPORTS_W void illuminationChange(InputArray src, InputArray mask, OutputArray dst, |
| 810 | float alpha = 0.2f, float beta = 0.4f); |
| 811 | |
| 812 | /** @brief By retaining only the gradients at edge locations, before integrating with the Poisson solver, one |
| 813 | washes out the texture of the selected region, giving its contents a flat aspect. Here Canny Edge %Detector is used. |
| 814 | |
| 815 | @param src Input 8-bit 3-channel image. |
| 816 | @param mask Input 8-bit 1 or 3-channel image. |
| 817 | @param dst Output image with the same size and type as src. |
| 818 | @param low_threshold %Range from 0 to 100. |
| 819 | @param high_threshold Value \> 100. |
| 820 | @param kernel_size The size of the Sobel kernel to be used. |
| 821 | |
| 822 | @note |
| 823 | The algorithm assumes that the color of the source image is close to that of the destination. This |
| 824 | assumption means that when the colors don't match, the source image color gets tinted toward the |
| 825 | color of the destination image. |
| 826 | */ |
| 827 | CV_EXPORTS_W void textureFlattening(InputArray src, InputArray mask, OutputArray dst, |
| 828 | float low_threshold = 30, float high_threshold = 45, |
| 829 | int kernel_size = 3); |
| 830 | |
| 831 | //! @} photo_clone |
| 832 | |
| 833 | //! @addtogroup photo_render |
| 834 | //! @{ |
| 835 | |
| 836 | //! Edge preserving filters |
| 837 | enum |
| 838 | { |
| 839 | RECURS_FILTER = 1, //!< Recursive Filtering |
| 840 | NORMCONV_FILTER = 2 //!< Normalized Convolution Filtering |
| 841 | }; |
| 842 | |
| 843 | /** @brief Filtering is the fundamental operation in image and video processing. Edge-preserving smoothing |
| 844 | filters are used in many different applications @cite EM11 . |
| 845 | |
| 846 | @param src Input 8-bit 3-channel image. |
| 847 | @param dst Output 8-bit 3-channel image. |
| 848 | @param flags Edge preserving filters: cv::RECURS_FILTER or cv::NORMCONV_FILTER |
| 849 | @param sigma_s %Range between 0 to 200. |
| 850 | @param sigma_r %Range between 0 to 1. |
| 851 | */ |
| 852 | CV_EXPORTS_W void edgePreservingFilter(InputArray src, OutputArray dst, int flags = 1, |
| 853 | float sigma_s = 60, float sigma_r = 0.4f); |
| 854 | |
| 855 | /** @brief This filter enhances the details of a particular image. |
| 856 | |
| 857 | @param src Input 8-bit 3-channel image. |
| 858 | @param dst Output image with the same size and type as src. |
| 859 | @param sigma_s %Range between 0 to 200. |
| 860 | @param sigma_r %Range between 0 to 1. |
| 861 | */ |
| 862 | CV_EXPORTS_W void detailEnhance(InputArray src, OutputArray dst, float sigma_s = 10, |
| 863 | float sigma_r = 0.15f); |
| 864 | |
| 865 | /** @example samples/cpp/tutorial_code/photo/non_photorealistic_rendering/npr_demo.cpp |
| 866 | An example using non-photorealistic line drawing functions |
| 867 | */ |
| 868 | /** @brief Pencil-like non-photorealistic line drawing |
| 869 | |
| 870 | @param src Input 8-bit 3-channel image. |
| 871 | @param dst1 Output 8-bit 1-channel image. |
| 872 | @param dst2 Output image with the same size and type as src. |
| 873 | @param sigma_s %Range between 0 to 200. |
| 874 | @param sigma_r %Range between 0 to 1. |
| 875 | @param shade_factor %Range between 0 to 0.1. |
| 876 | */ |
| 877 | CV_EXPORTS_W void pencilSketch(InputArray src, OutputArray dst1, OutputArray dst2, |
| 878 | float sigma_s = 60, float sigma_r = 0.07f, float shade_factor = 0.02f); |
| 879 | |
| 880 | /** @brief Stylization aims to produce digital imagery with a wide variety of effects not focused on |
| 881 | photorealism. Edge-aware filters are ideal for stylization, as they can abstract regions of low |
| 882 | contrast while preserving, or enhancing, high-contrast features. |
| 883 | |
| 884 | @param src Input 8-bit 3-channel image. |
| 885 | @param dst Output image with the same size and type as src. |
| 886 | @param sigma_s %Range between 0 to 200. |
| 887 | @param sigma_r %Range between 0 to 1. |
| 888 | */ |
| 889 | CV_EXPORTS_W void stylization(InputArray src, OutputArray dst, float sigma_s = 60, |
| 890 | float sigma_r = 0.45f); |
| 891 | |
| 892 | //! @} photo_render |
| 893 | |
| 894 | //! @} photo |
| 895 | |
| 896 | } // cv |
| 897 | |
| 898 | #endif |
| 899 | |