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) 2009, 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_CUDAWARPING_HPP__ 44 #define __OPENCV_CUDAWARPING_HPP__ 45 46 #ifndef __cplusplus 47 # error cudawarping.hpp header must be compiled as C++ 48 #endif 49 50 #include "opencv2/core/cuda.hpp" 51 #include "opencv2/imgproc.hpp" 52 53 /** 54 @addtogroup cuda 55 @{ 56 @defgroup cudawarping Image Warping 57 @} 58 */ 59 60 namespace cv { namespace cuda { 61 62 //! @addtogroup cudawarping 63 //! @{ 64 65 /** @brief Applies a generic geometrical transformation to an image. 66 67 @param src Source image. 68 @param dst Destination image with the size the same as xmap and the type the same as src . 69 @param xmap X values. Only CV_32FC1 type is supported. 70 @param ymap Y values. Only CV_32FC1 type is supported. 71 @param interpolation Interpolation method (see resize ). INTER_NEAREST , INTER_LINEAR and 72 INTER_CUBIC are supported for now. 73 @param borderMode Pixel extrapolation method (see borderInterpolate ). BORDER_REFLECT101 , 74 BORDER_REPLICATE , BORDER_CONSTANT , BORDER_REFLECT and BORDER_WRAP are supported for now. 75 @param borderValue Value used in case of a constant border. By default, it is 0. 76 @param stream Stream for the asynchronous version. 77 78 The function transforms the source image using the specified map: 79 80 \f[\texttt{dst} (x,y) = \texttt{src} (xmap(x,y), ymap(x,y))\f] 81 82 Values of pixels with non-integer coordinates are computed using the bilinear interpolation. 83 84 @sa remap 85 */ 86 CV_EXPORTS void remap(InputArray src, OutputArray dst, InputArray xmap, InputArray ymap, 87 int interpolation, int borderMode = BORDER_CONSTANT, Scalar borderValue = Scalar(), 88 Stream& stream = Stream::Null()); 89 90 /** @brief Resizes an image. 91 92 @param src Source image. 93 @param dst Destination image with the same type as src . The size is dsize (when it is non-zero) 94 or the size is computed from src.size() , fx , and fy . 95 @param dsize Destination image size. If it is zero, it is computed as: 96 \f[\texttt{dsize = Size(round(fx*src.cols), round(fy*src.rows))}\f] 97 Either dsize or both fx and fy must be non-zero. 98 @param fx Scale factor along the horizontal axis. If it is zero, it is computed as: 99 \f[\texttt{(double)dsize.width/src.cols}\f] 100 @param fy Scale factor along the vertical axis. If it is zero, it is computed as: 101 \f[\texttt{(double)dsize.height/src.rows}\f] 102 @param interpolation Interpolation method. INTER_NEAREST , INTER_LINEAR and INTER_CUBIC are 103 supported for now. 104 @param stream Stream for the asynchronous version. 105 106 @sa resize 107 */ 108 CV_EXPORTS void resize(InputArray src, OutputArray dst, Size dsize, double fx=0, double fy=0, int interpolation = INTER_LINEAR, Stream& stream = Stream::Null()); 109 110 /** @brief Applies an affine transformation to an image. 111 112 @param src Source image. CV_8U , CV_16U , CV_32S , or CV_32F depth and 1, 3, or 4 channels are 113 supported. 114 @param dst Destination image with the same type as src . The size is dsize . 115 @param M *2x3* transformation matrix. 116 @param dsize Size of the destination image. 117 @param flags Combination of interpolation methods (see resize) and the optional flag 118 WARP_INVERSE_MAP specifying that M is an inverse transformation ( dst=\>src ). Only 119 INTER_NEAREST , INTER_LINEAR , and INTER_CUBIC interpolation methods are supported. 120 @param borderMode 121 @param borderValue 122 @param stream Stream for the asynchronous version. 123 124 @sa warpAffine 125 */ 126 CV_EXPORTS void warpAffine(InputArray src, OutputArray dst, InputArray M, Size dsize, int flags = INTER_LINEAR, 127 int borderMode = BORDER_CONSTANT, Scalar borderValue = Scalar(), Stream& stream = Stream::Null()); 128 129 /** @brief Builds transformation maps for affine transformation. 130 131 @param M *2x3* transformation matrix. 132 @param inverse Flag specifying that M is an inverse transformation ( dst=\>src ). 133 @param dsize Size of the destination image. 134 @param xmap X values with CV_32FC1 type. 135 @param ymap Y values with CV_32FC1 type. 136 @param stream Stream for the asynchronous version. 137 138 @sa cuda::warpAffine , cuda::remap 139 */ 140 CV_EXPORTS void buildWarpAffineMaps(InputArray M, bool inverse, Size dsize, OutputArray xmap, OutputArray ymap, Stream& stream = Stream::Null()); 141 142 /** @brief Applies a perspective transformation to an image. 143 144 @param src Source image. CV_8U , CV_16U , CV_32S , or CV_32F depth and 1, 3, or 4 channels are 145 supported. 146 @param dst Destination image with the same type as src . The size is dsize . 147 @param M *3x3* transformation matrix. 148 @param dsize Size of the destination image. 149 @param flags Combination of interpolation methods (see resize ) and the optional flag 150 WARP_INVERSE_MAP specifying that M is the inverse transformation ( dst =\> src ). Only 151 INTER_NEAREST , INTER_LINEAR , and INTER_CUBIC interpolation methods are supported. 152 @param borderMode 153 @param borderValue 154 @param stream Stream for the asynchronous version. 155 156 @sa warpPerspective 157 */ 158 CV_EXPORTS void warpPerspective(InputArray src, OutputArray dst, InputArray M, Size dsize, int flags = INTER_LINEAR, 159 int borderMode = BORDER_CONSTANT, Scalar borderValue = Scalar(), Stream& stream = Stream::Null()); 160 161 /** @brief Builds transformation maps for perspective transformation. 162 163 @param M *3x3* transformation matrix. 164 @param inverse Flag specifying that M is an inverse transformation ( dst=\>src ). 165 @param dsize Size of the destination image. 166 @param xmap X values with CV_32FC1 type. 167 @param ymap Y values with CV_32FC1 type. 168 @param stream Stream for the asynchronous version. 169 170 @sa cuda::warpPerspective , cuda::remap 171 */ 172 CV_EXPORTS void buildWarpPerspectiveMaps(InputArray M, bool inverse, Size dsize, OutputArray xmap, OutputArray ymap, Stream& stream = Stream::Null()); 173 174 /** @brief Rotates an image around the origin (0,0) and then shifts it. 175 176 @param src Source image. Supports 1, 3 or 4 channels images with CV_8U , CV_16U or CV_32F 177 depth. 178 @param dst Destination image with the same type as src . The size is dsize . 179 @param dsize Size of the destination image. 180 @param angle Angle of rotation in degrees. 181 @param xShift Shift along the horizontal axis. 182 @param yShift Shift along the vertical axis. 183 @param interpolation Interpolation method. Only INTER_NEAREST , INTER_LINEAR , and INTER_CUBIC 184 are supported. 185 @param stream Stream for the asynchronous version. 186 187 @sa cuda::warpAffine 188 */ 189 CV_EXPORTS void rotate(InputArray src, OutputArray dst, Size dsize, double angle, double xShift = 0, double yShift = 0, 190 int interpolation = INTER_LINEAR, Stream& stream = Stream::Null()); 191 192 /** @brief Smoothes an image and downsamples it. 193 194 @param src Source image. 195 @param dst Destination image. Will have Size((src.cols+1)/2, (src.rows+1)/2) size and the same 196 type as src . 197 @param stream Stream for the asynchronous version. 198 199 @sa pyrDown 200 */ 201 CV_EXPORTS void pyrDown(InputArray src, OutputArray dst, Stream& stream = Stream::Null()); 202 203 /** @brief Upsamples an image and then smoothes it. 204 205 @param src Source image. 206 @param dst Destination image. Will have Size(src.cols\*2, src.rows\*2) size and the same type as 207 src . 208 @param stream Stream for the asynchronous version. 209 */ 210 CV_EXPORTS void pyrUp(InputArray src, OutputArray dst, Stream& stream = Stream::Null()); 211 212 //! @} 213 214 }} // namespace cv { namespace cuda { 215 216 #endif /* __OPENCV_CUDAWARPING_HPP__ */ 217