github.com/kaydxh/golang@v0.0.131/pkg/gocv/cgo/third_path/opencv4/include/opencv2/stitching/warpers.hpp (about)

     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_STITCHING_WARPER_CREATORS_HPP
    44  #define OPENCV_STITCHING_WARPER_CREATORS_HPP
    45  
    46  #include "opencv2/stitching/detail/warpers.hpp"
    47  #include <string>
    48  
    49  namespace cv {
    50      class CV_EXPORTS_W PyRotationWarper
    51      {
    52          Ptr<detail::RotationWarper> rw;
    53  
    54      public:
    55          CV_WRAP PyRotationWarper(String type, float scale);
    56          CV_WRAP PyRotationWarper() {};
    57          ~PyRotationWarper() {}
    58  
    59          /** @brief Projects the image point.
    60  
    61          @param pt Source point
    62          @param K Camera intrinsic parameters
    63          @param R Camera rotation matrix
    64          @return Projected point
    65          */
    66          CV_WRAP Point2f warpPoint(const Point2f &pt, InputArray K, InputArray R);
    67  
    68          /** @brief Projects the image point backward.
    69  
    70          @param pt Projected point
    71          @param K Camera intrinsic parameters
    72          @param R Camera rotation matrix
    73          @return Backward-projected point
    74          */
    75  #if CV_VERSION_MAJOR == 4
    76          CV_WRAP Point2f warpPointBackward(const Point2f& pt, InputArray K, InputArray R)
    77          {
    78              CV_UNUSED(pt); CV_UNUSED(K); CV_UNUSED(R);
    79              CV_Error(Error::StsNotImplemented, "");
    80          }
    81  #else
    82          CV_WRAP Point2f warpPointBackward(const Point2f &pt, InputArray K, InputArray R);
    83  #endif
    84          /** @brief Builds the projection maps according to the given camera data.
    85  
    86          @param src_size Source image size
    87          @param K Camera intrinsic parameters
    88          @param R Camera rotation matrix
    89          @param xmap Projection map for the x axis
    90          @param ymap Projection map for the y axis
    91          @return Projected image minimum bounding box
    92          */
    93          CV_WRAP Rect buildMaps(Size src_size, InputArray K, InputArray R, OutputArray xmap, OutputArray ymap);
    94  
    95          /** @brief Projects the image.
    96  
    97          @param src Source image
    98          @param K Camera intrinsic parameters
    99          @param R Camera rotation matrix
   100          @param interp_mode Interpolation mode
   101          @param border_mode Border extrapolation mode
   102          @param dst Projected image
   103          @return Project image top-left corner
   104          */
   105          CV_WRAP Point warp(InputArray src, InputArray K, InputArray R, int interp_mode, int border_mode,
   106              CV_OUT OutputArray dst);
   107  
   108          /** @brief Projects the image backward.
   109  
   110          @param src Projected image
   111          @param K Camera intrinsic parameters
   112          @param R Camera rotation matrix
   113          @param interp_mode Interpolation mode
   114          @param border_mode Border extrapolation mode
   115          @param dst_size Backward-projected image size
   116          @param dst Backward-projected image
   117          */
   118          CV_WRAP void warpBackward(InputArray src, InputArray K, InputArray R, int interp_mode, int border_mode,
   119              Size dst_size, CV_OUT OutputArray dst);
   120  
   121          /**
   122          @param src_size Source image bounding box
   123          @param K Camera intrinsic parameters
   124          @param R Camera rotation matrix
   125          @return Projected image minimum bounding box
   126          */
   127          CV_WRAP Rect warpRoi(Size src_size, InputArray K, InputArray R);
   128  
   129          CV_WRAP float getScale() const { return 1.f; }
   130          CV_WRAP void setScale(float) {}
   131      };
   132  
   133  //! @addtogroup stitching_warp
   134  //! @{
   135  
   136  /** @brief Image warper factories base class.
   137   */
   138  
   139  class CV_EXPORTS_W WarperCreator
   140  {
   141  public:
   142      CV_WRAP virtual ~WarperCreator() {}
   143      virtual Ptr<detail::RotationWarper> create(float scale) const = 0;
   144  };
   145  
   146  
   147  /** @brief Plane warper factory class.
   148    @sa detail::PlaneWarper
   149   */
   150  class CV_EXPORTS  PlaneWarper : public WarperCreator
   151  {
   152  public:
   153      Ptr<detail::RotationWarper> create(float scale) const CV_OVERRIDE { return makePtr<detail::PlaneWarper>(scale); }
   154  };
   155  
   156  /** @brief Affine warper factory class.
   157    @sa detail::AffineWarper
   158   */
   159  class CV_EXPORTS  AffineWarper : public WarperCreator
   160  {
   161  public:
   162      Ptr<detail::RotationWarper> create(float scale) const CV_OVERRIDE { return makePtr<detail::AffineWarper>(scale); }
   163  };
   164  
   165  /** @brief Cylindrical warper factory class.
   166  @sa detail::CylindricalWarper
   167  */
   168  class CV_EXPORTS CylindricalWarper: public WarperCreator
   169  {
   170  public:
   171      Ptr<detail::RotationWarper> create(float scale) const CV_OVERRIDE { return makePtr<detail::CylindricalWarper>(scale); }
   172  };
   173  
   174  /** @brief Spherical warper factory class */
   175  class CV_EXPORTS SphericalWarper: public WarperCreator
   176  {
   177  public:
   178      Ptr<detail::RotationWarper> create(float scale) const CV_OVERRIDE { return makePtr<detail::SphericalWarper>(scale); }
   179  };
   180  
   181  class CV_EXPORTS FisheyeWarper : public WarperCreator
   182  {
   183  public:
   184      Ptr<detail::RotationWarper> create(float scale) const CV_OVERRIDE { return makePtr<detail::FisheyeWarper>(scale); }
   185  };
   186  
   187  class CV_EXPORTS StereographicWarper: public WarperCreator
   188  {
   189  public:
   190      Ptr<detail::RotationWarper> create(float scale) const CV_OVERRIDE { return makePtr<detail::StereographicWarper>(scale); }
   191  };
   192  
   193  class CV_EXPORTS CompressedRectilinearWarper: public WarperCreator
   194  {
   195      float a, b;
   196  public:
   197      CompressedRectilinearWarper(float A = 1, float B = 1)
   198      {
   199          a = A; b = B;
   200      }
   201      Ptr<detail::RotationWarper> create(float scale) const CV_OVERRIDE { return makePtr<detail::CompressedRectilinearWarper>(scale, a, b); }
   202  };
   203  
   204  class CV_EXPORTS CompressedRectilinearPortraitWarper: public WarperCreator
   205  {
   206      float a, b;
   207  public:
   208      CompressedRectilinearPortraitWarper(float A = 1, float B = 1)
   209      {
   210          a = A; b = B;
   211      }
   212      Ptr<detail::RotationWarper> create(float scale) const CV_OVERRIDE { return makePtr<detail::CompressedRectilinearPortraitWarper>(scale, a, b); }
   213  };
   214  
   215  class CV_EXPORTS PaniniWarper: public WarperCreator
   216  {
   217      float a, b;
   218  public:
   219      PaniniWarper(float A = 1, float B = 1)
   220      {
   221          a = A; b = B;
   222      }
   223      Ptr<detail::RotationWarper> create(float scale) const CV_OVERRIDE { return makePtr<detail::PaniniWarper>(scale, a, b); }
   224  };
   225  
   226  class CV_EXPORTS PaniniPortraitWarper: public WarperCreator
   227  {
   228      float a, b;
   229  public:
   230      PaniniPortraitWarper(float A = 1, float B = 1)
   231      {
   232          a = A; b = B;
   233      }
   234      Ptr<detail::RotationWarper> create(float scale) const CV_OVERRIDE { return makePtr<detail::PaniniPortraitWarper>(scale, a, b); }
   235  };
   236  
   237  class CV_EXPORTS MercatorWarper: public WarperCreator
   238  {
   239  public:
   240      Ptr<detail::RotationWarper> create(float scale) const CV_OVERRIDE { return makePtr<detail::MercatorWarper>(scale); }
   241  };
   242  
   243  class CV_EXPORTS TransverseMercatorWarper: public WarperCreator
   244  {
   245  public:
   246      Ptr<detail::RotationWarper> create(float scale) const CV_OVERRIDE { return makePtr<detail::TransverseMercatorWarper>(scale); }
   247  };
   248  
   249  
   250  
   251  #ifdef HAVE_OPENCV_CUDAWARPING
   252  class PlaneWarperGpu: public WarperCreator
   253  {
   254  public:
   255      Ptr<detail::RotationWarper> create(float scale) const CV_OVERRIDE { return makePtr<detail::PlaneWarperGpu>(scale); }
   256  };
   257  
   258  
   259  class CylindricalWarperGpu: public WarperCreator
   260  {
   261  public:
   262      Ptr<detail::RotationWarper> create(float scale) const CV_OVERRIDE { return makePtr<detail::CylindricalWarperGpu>(scale); }
   263  };
   264  
   265  
   266  class SphericalWarperGpu: public WarperCreator
   267  {
   268  public:
   269      Ptr<detail::RotationWarper> create(float scale) const CV_OVERRIDE { return makePtr<detail::SphericalWarperGpu>(scale); }
   270  };
   271  #endif
   272  
   273  //! @} stitching_warp
   274  
   275  } // namespace cv
   276  
   277  #endif // OPENCV_STITCHING_WARPER_CREATORS_HPP