Browse Source

Added RotationWarper.

pull/348/head
Canming Huang 5 years ago
parent
commit
6120557c69
  1. 4
      Emgu.CV.Example/Stitching/StitchingMainForm.cs
  2. 339
      Emgu.CV.Extern/stitching/stitching_c.cpp
  3. 102
      Emgu.CV.Extern/stitching/stitching_c.h
  4. 34
      Emgu.CV.Test/AutoTestVarious.cs
  5. 525
      Emgu.CV/Stitching/RotationWarper.cs
  6. 191
      Emgu.CV/Stitching/WarperCreator.cs
  7. 11
      Solution/Windows.Desktop/Emgu.CV.Test.Netcore.sln

4
Emgu.CV.Example/Stitching/StitchingMainForm.cs

@ -51,10 +51,12 @@ namespace Stitching
try
{
//only use GPU if you have build the native binary from code and enabled "NON_FREE"
using (Stitcher stitcher = new Stitcher())
using (Stitcher stitcher = new Stitcher())
using (Emgu.CV.Features2D.AKAZE finder = new Emgu.CV.Features2D.AKAZE())
using (Emgu.CV.Stitching.WarperCreator warper = new SphericalWarper())
{
stitcher.SetFeaturesFinder(finder);
stitcher.SetWarper(warper);
using (VectorOfMat vm = new VectorOfMat())
{
Mat result = new Mat();

339
Emgu.CV.Extern/stitching/stitching_c.cpp

@ -275,18 +275,36 @@ void cveRotationWarperWarp(cv::detail::RotationWarper* warper, cv::_InputArray*
#endif
}
cv::detail::PlaneWarper* cvePlaneWarperCreate(float scale, cv::WarperCreator** creator, cv::detail::RotationWarper** rotationWarper)
cv::detail::PlaneWarper* cveDetailPlaneWarperCreate(float scale, cv::detail::RotationWarper** rotationWarper)
{
#ifdef HAVE_OPENCV_STITCHING
cv::detail::PlaneWarper* ptr = new cv::detail::PlaneWarper(scale);
*creator = dynamic_cast<cv::WarperCreator*>(ptr);
*rotationWarper = dynamic_cast<cv::detail::RotationWarper*>(ptr);
return ptr;
#else
throw_no_stitching();
#endif
}
void cvePlaneWarperRelease(cv::detail::PlaneWarper** warper)
void cveDetailPlaneWarperRelease(cv::detail::PlaneWarper** warper)
{
#ifdef HAVE_OPENCV_STITCHING
delete* warper;
*warper = 0;
#else
throw_no_stitching();
#endif
}
cv::PlaneWarper* cvePlaneWraperCreate(cv::WarperCreator** warperCreator)
{
#ifdef HAVE_OPENCV_STITCHING
cv::PlaneWarper* ptr = new cv::PlaneWarper();
*warperCreator = dynamic_cast<cv::WarperCreator*>(ptr);
return ptr;
#else
throw_no_stitching();
#endif
}
void cvePlaneWarperRelease(cv::PlaneWarper** warper)
{
#ifdef HAVE_OPENCV_STITCHING
delete* warper;
@ -296,18 +314,36 @@ void cvePlaneWarperRelease(cv::detail::PlaneWarper** warper)
#endif
}
cv::detail::CylindricalWarper* cveCylindricalWarperCreate(float scale, cv::WarperCreator** creator, cv::detail::RotationWarper** rotationWarper)
cv::detail::CylindricalWarper* cveDetailCylindricalWarperCreate(float scale, cv::detail::RotationWarper** rotationWarper)
{
#ifdef HAVE_OPENCV_STITCHING
cv::detail::CylindricalWarper* ptr = new cv::detail::CylindricalWarper(scale);
*creator = dynamic_cast<cv::WarperCreator*>(ptr);
cv::detail::CylindricalWarper* ptr = new cv::detail::CylindricalWarper(scale);
*rotationWarper = dynamic_cast<cv::detail::RotationWarper*>(ptr);
return ptr;
#else
throw_no_stitching();
#endif
}
void cveCylindricalWarperRelease(cv::detail::CylindricalWarper** warper)
void cveDetailCylindricalWarperRelease(cv::detail::CylindricalWarper** warper)
{
#ifdef HAVE_OPENCV_STITCHING
delete* warper;
*warper = 0;
#else
throw_no_stitching();
#endif
}
cv::CylindricalWarper* cveCylindricalWarperCreate(cv::WarperCreator** warperCreator)
{
#ifdef HAVE_OPENCV_STITCHING
cv::CylindricalWarper* ptr = new cv::CylindricalWarper();
*warperCreator = dynamic_cast<cv::WarperCreator*>(ptr);
return ptr;
#else
throw_no_stitching();
#endif
}
void cveCylindricalWarperRelease(cv::CylindricalWarper** warper)
{
#ifdef HAVE_OPENCV_STITCHING
delete* warper;
@ -317,18 +353,17 @@ void cveCylindricalWarperRelease(cv::detail::CylindricalWarper** warper)
#endif
}
cv::detail::SphericalWarper* cveSphericalWarperCreate(float scale, cv::WarperCreator** creator, cv::detail::RotationWarper** rotationWarper)
cv::detail::SphericalWarper* cveDetailSphericalWarperCreate(float scale, cv::detail::RotationWarper** rotationWarper)
{
#ifdef HAVE_OPENCV_STITCHING
cv::detail::SphericalWarper* ptr = new cv::detail::SphericalWarper(scale);
*creator = dynamic_cast<cv::WarperCreator*>(ptr);
*rotationWarper = dynamic_cast<cv::detail::RotationWarper*>(ptr);
return ptr;
#else
throw_no_stitching();
#endif
}
void cveSphericalWarperRelease(cv::detail::SphericalWarper** warper)
void cveDetailSphericalWarperRelease(cv::detail::SphericalWarper** warper)
{
#ifdef HAVE_OPENCV_STITCHING
delete* warper;
@ -338,18 +373,37 @@ void cveSphericalWarperRelease(cv::detail::SphericalWarper** warper)
#endif
}
cv::detail::FisheyeWarper* cveFisheyeWarperCreate(float scale, cv::WarperCreator** creator, cv::detail::RotationWarper** rotationWarper)
cv::SphericalWarper* cveSphericalWarperCreate(cv::WarperCreator** warperCreator)
{
#ifdef HAVE_OPENCV_STITCHING
cv::SphericalWarper* ptr = new cv::SphericalWarper();
*warperCreator = dynamic_cast<cv::WarperCreator*>(ptr);
return ptr;
#else
throw_no_stitching();
#endif
}
void cveSphericalWarperRelease(cv::SphericalWarper** warperCreator)
{
#ifdef HAVE_OPENCV_STITCHING
delete* warperCreator;
*warperCreator = 0;
#else
throw_no_stitching();
#endif
}
cv::detail::FisheyeWarper* cveDetailFisheyeWarperCreate(float scale, cv::detail::RotationWarper** rotationWarper)
{
#ifdef HAVE_OPENCV_STITCHING
cv::detail::FisheyeWarper* ptr = new cv::detail::FisheyeWarper(scale);
*creator = dynamic_cast<cv::WarperCreator*>(ptr);
*rotationWarper = dynamic_cast<cv::detail::RotationWarper*>(ptr);
return ptr;
#else
throw_no_stitching();
#endif
}
void cveFisheyeWarperRelease(cv::detail::FisheyeWarper** warper)
void cveDetailFisheyeWarperRelease(cv::detail::FisheyeWarper** warper)
{
#ifdef HAVE_OPENCV_STITCHING
delete* warper;
@ -358,19 +412,37 @@ void cveFisheyeWarperRelease(cv::detail::FisheyeWarper** warper)
throw_no_stitching();
#endif
}
cv::FisheyeWarper* cveFisheyeWarperCreate(cv::WarperCreator** warperCreator)
{
#ifdef HAVE_OPENCV_STITCHING
cv::FisheyeWarper* ptr = new cv::FisheyeWarper();
*warperCreator = dynamic_cast<cv::WarperCreator*>(ptr);
return ptr;
#else
throw_no_stitching();
#endif
}
void cveFisheyeWarperRelease(cv::FisheyeWarper** warperCreator)
{
#ifdef HAVE_OPENCV_STITCHING
delete* warperCreator;
*warperCreator = 0;
#else
throw_no_stitching();
#endif
}
cv::detail::StereographicWarper* cveStereographicWarperCreate(float scale, cv::WarperCreator** creator, cv::detail::RotationWarper** rotationWarper)
cv::detail::StereographicWarper* cveDetailStereographicWarperCreate(float scale, cv::detail::RotationWarper** rotationWarper)
{
#ifdef HAVE_OPENCV_STITCHING
cv::detail::StereographicWarper* ptr = new cv::detail::StereographicWarper(scale);
*creator = dynamic_cast<cv::WarperCreator*>(ptr);
*rotationWarper = dynamic_cast<cv::detail::RotationWarper*>(ptr);
return ptr;
#else
throw_no_stitching();
#endif
}
void cveStereographicWarperRelease(cv::detail::StereographicWarper** warper)
void cveDetailStereographicWarperRelease(cv::detail::StereographicWarper** warper)
{
#ifdef HAVE_OPENCV_STITCHING
delete* warper;
@ -379,19 +451,37 @@ void cveStereographicWarperRelease(cv::detail::StereographicWarper** warper)
throw_no_stitching();
#endif
}
cv::StereographicWarper* cveStereographicWarperCreate(cv::WarperCreator** warperCreator)
{
#ifdef HAVE_OPENCV_STITCHING
cv::StereographicWarper* ptr = new cv::StereographicWarper();
*warperCreator = dynamic_cast<cv::WarperCreator*>(ptr);
return ptr;
#else
throw_no_stitching();
#endif
}
void cveStereographicWarperRelease(cv::StereographicWarper** warperCreator)
{
#ifdef HAVE_OPENCV_STITCHING
delete* warperCreator;
*warperCreator = 0;
#else
throw_no_stitching();
#endif
}
cv::detail::CompressedRectilinearWarper* cveCompressedRectilinearWarperCreate(float scale, cv::WarperCreator** creator, cv::detail::RotationWarper** rotationWarper)
cv::detail::CompressedRectilinearWarper* cveDetailCompressedRectilinearWarperCreate(float scale, cv::detail::RotationWarper** rotationWarper)
{
#ifdef HAVE_OPENCV_STITCHING
cv::detail::CompressedRectilinearWarper* ptr = new cv::detail::CompressedRectilinearWarper(scale);
*creator = dynamic_cast<cv::WarperCreator*>(ptr);
*rotationWarper = dynamic_cast<cv::detail::RotationWarper*>(ptr);
return ptr;
#else
throw_no_stitching();
#endif
}
void cveCompressedRectilinearWarperRelease(cv::detail::CompressedRectilinearWarper** warper)
void cveDetailCompressedRectilinearWarperRelease(cv::detail::CompressedRectilinearWarper** warper)
{
#ifdef HAVE_OPENCV_STITCHING
delete* warper;
@ -400,19 +490,37 @@ void cveCompressedRectilinearWarperRelease(cv::detail::CompressedRectilinearWarp
throw_no_stitching();
#endif
}
cv::CompressedRectilinearWarper* cveCompressedRectilinearWarperCreate(cv::WarperCreator** warperCreator)
{
#ifdef HAVE_OPENCV_STITCHING
cv::CompressedRectilinearWarper* ptr = new cv::CompressedRectilinearWarper();
*warperCreator = dynamic_cast<cv::WarperCreator*>(ptr);
return ptr;
#else
throw_no_stitching();
#endif
}
void cveCompressedRectilinearWarperRelease(cv::CompressedRectilinearWarper** warperCreator)
{
#ifdef HAVE_OPENCV_STITCHING
delete* warperCreator;
*warperCreator = 0;
#else
throw_no_stitching();
#endif
}
cv::detail::PaniniWarper* cvePaniniWarperCreate(float scale, cv::WarperCreator** creator, cv::detail::RotationWarper** rotationWarper)
cv::detail::PaniniWarper* cveDetailPaniniWarperCreate(float scale, cv::detail::RotationWarper** rotationWarper)
{
#ifdef HAVE_OPENCV_STITCHING
cv::detail::PaniniWarper* ptr = new cv::detail::PaniniWarper(scale);
*creator = dynamic_cast<cv::WarperCreator*>(ptr);
*rotationWarper = dynamic_cast<cv::detail::RotationWarper*>(ptr);
return ptr;
#else
throw_no_stitching();
#endif
}
void cvePaniniWarperRelease(cv::detail::PaniniWarper** warper)
void cveDetailPaniniWarperRelease(cv::detail::PaniniWarper** warper)
{
#ifdef HAVE_OPENCV_STITCHING
delete* warper;
@ -421,19 +529,37 @@ void cvePaniniWarperRelease(cv::detail::PaniniWarper** warper)
throw_no_stitching();
#endif
}
cv::PaniniWarper* cvePaniniWarperCreate(cv::WarperCreator** warperCreator)
{
#ifdef HAVE_OPENCV_STITCHING
cv::PaniniWarper* ptr = new cv::PaniniWarper();
*warperCreator = dynamic_cast<cv::WarperCreator*>(ptr);
return ptr;
#else
throw_no_stitching();
#endif
}
void cvePaniniWarperRelease(cv::PaniniWarper** warperCreator)
{
#ifdef HAVE_OPENCV_STITCHING
delete* warperCreator;
*warperCreator = 0;
#else
throw_no_stitching();
#endif
}
cv::detail::PaniniPortraitWarper* cvePaniniPortraitWarperCreate(float scale, cv::WarperCreator** creator, cv::detail::RotationWarper** rotationWarper)
cv::detail::PaniniPortraitWarper* cveDetailPaniniPortraitWarperCreate(float scale, cv::detail::RotationWarper** rotationWarper)
{
#ifdef HAVE_OPENCV_STITCHING
cv::detail::PaniniPortraitWarper* ptr = new cv::detail::PaniniPortraitWarper(scale);
*creator = dynamic_cast<cv::WarperCreator*>(ptr);
*rotationWarper = dynamic_cast<cv::detail::RotationWarper*>(ptr);
return ptr;
#else
throw_no_stitching();
#endif
}
void cvePaniniPortraitWarperRelease(cv::detail::PaniniPortraitWarper** warper)
void cveDetailPaniniPortraitWarperRelease(cv::detail::PaniniPortraitWarper** warper)
{
#ifdef HAVE_OPENCV_STITCHING
delete* warper;
@ -442,19 +568,37 @@ void cvePaniniPortraitWarperRelease(cv::detail::PaniniPortraitWarper** warper)
throw_no_stitching();
#endif
}
cv::PaniniPortraitWarper* cvePaniniPortraitWarperCreate(cv::WarperCreator** warperCreator)
{
#ifdef HAVE_OPENCV_STITCHING
cv::PaniniPortraitWarper* ptr = new cv::PaniniPortraitWarper();
*warperCreator = dynamic_cast<cv::WarperCreator*>(ptr);
return ptr;
#else
throw_no_stitching();
#endif
}
void cvePaniniPortraitWarperRelease(cv::PaniniPortraitWarper** warperCreator)
{
#ifdef HAVE_OPENCV_STITCHING
delete* warperCreator;
*warperCreator = 0;
#else
throw_no_stitching();
#endif
}
cv::detail::MercatorWarper* cveMercatorWarperCreate(float scale, cv::WarperCreator** creator, cv::detail::RotationWarper** rotationWarper)
cv::detail::MercatorWarper* cveDetailMercatorWarperCreate(float scale, cv::detail::RotationWarper** rotationWarper)
{
#ifdef HAVE_OPENCV_STITCHING
cv::detail::MercatorWarper* ptr = new cv::detail::MercatorWarper(scale);
*creator = dynamic_cast<cv::WarperCreator*>(ptr);
*rotationWarper = dynamic_cast<cv::detail::RotationWarper*>(ptr);
return ptr;
#else
throw_no_stitching();
#endif
}
void cveMercatorWarperRelease(cv::detail::MercatorWarper** warper)
void cveDetailMercatorWarperRelease(cv::detail::MercatorWarper** warper)
{
#ifdef HAVE_OPENCV_STITCHING
delete* warper;
@ -463,19 +607,37 @@ void cveMercatorWarperRelease(cv::detail::MercatorWarper** warper)
throw_no_stitching();
#endif
}
cv::MercatorWarper* cveMercatorWarperCreate(cv::WarperCreator** warperCreator)
{
#ifdef HAVE_OPENCV_STITCHING
cv::MercatorWarper* ptr = new cv::MercatorWarper();
*warperCreator = dynamic_cast<cv::WarperCreator*>(ptr);
return ptr;
#else
throw_no_stitching();
#endif
}
void cveMercatorWarperRelease(cv::MercatorWarper** warperCreator)
{
#ifdef HAVE_OPENCV_STITCHING
delete* warperCreator;
*warperCreator = 0;
#else
throw_no_stitching();
#endif
}
cv::detail::TransverseMercatorWarper* cveTransverseMercatorWarperCreate(float scale, cv::WarperCreator** creator, cv::detail::RotationWarper** rotationWarper)
cv::detail::TransverseMercatorWarper* cveDetailTransverseMercatorWarperCreate(float scale, cv::detail::RotationWarper** rotationWarper)
{
#ifdef HAVE_OPENCV_STITCHING
cv::detail::TransverseMercatorWarper* ptr = new cv::detail::TransverseMercatorWarper(scale);
*creator = dynamic_cast<cv::WarperCreator*>(ptr);
*rotationWarper = dynamic_cast<cv::detail::RotationWarper*>(ptr);
return ptr;
#else
throw_no_stitching();
#endif
}
void cveTransverseMercatorWarperRelease(cv::detail::TransverseMercatorWarper** warper)
void cveDetailTransverseMercatorWarperRelease(cv::detail::TransverseMercatorWarper** warper)
{
#ifdef HAVE_OPENCV_STITCHING
delete* warper;
@ -484,6 +646,25 @@ void cveTransverseMercatorWarperRelease(cv::detail::TransverseMercatorWarper** w
throw_no_stitching();
#endif
}
cv::TransverseMercatorWarper* cveTransverseMercatorWarperCreate(cv::WarperCreator** warperCreator)
{
#ifdef HAVE_OPENCV_STITCHING
cv::TransverseMercatorWarper * ptr = new cv::TransverseMercatorWarper();
*warperCreator = dynamic_cast<cv::WarperCreator*>(ptr);
return ptr;
#else
throw_no_stitching();
#endif
}
void cveTransverseMercatorWarperRelease(cv::TransverseMercatorWarper** warperCreator)
{
#ifdef HAVE_OPENCV_STITCHING
delete* warperCreator;
*warperCreator = 0;
#else
throw_no_stitching();
#endif
}
cv::detail::FeatherBlender* cveFeatherBlenderCreate(float sharpness, cv::detail::Blender** blender)
{
@ -962,12 +1143,11 @@ void cveAffineBestOf2NearestMatcherRelease(cv::detail::AffineBestOf2NearestMatch
}
cv::detail::PlaneWarperGpu* cvePlaneWarperGpuCreate(float scale, cv::WarperCreator** creator, cv::detail::RotationWarper** rotationWarper)
cv::detail::PlaneWarperGpu* cveDetailPlaneWarperGpuCreate(float scale, cv::detail::RotationWarper** rotationWarper)
{
#ifdef HAVE_OPENCV_STITCHING
#ifdef HAVE_OPENCV_CUDAWARPING
cv::detail::PlaneWarperGpu* ptr = new cv::detail::PlaneWarperGpu(scale);
*creator = dynamic_cast<cv::WarperCreator*>(ptr);
*rotationWarper = dynamic_cast<cv::detail::RotationWarper*>(ptr);
return ptr;
#else
@ -977,7 +1157,34 @@ cv::detail::PlaneWarperGpu* cvePlaneWarperGpuCreate(float scale, cv::WarperCreat
throw_no_stitching();
#endif
}
void cvePlaneWarperGpuRelease(cv::detail::PlaneWarperGpu** warper)
void cveDetailPlaneWarperGpuRelease(cv::detail::PlaneWarperGpu** warper)
{
#ifdef HAVE_OPENCV_STITCHING
#ifdef HAVE_OPENCV_CUDAWARPING
delete* warper;
*warper = 0;
#else
throw_no_cudawarping();
#endif
#else
throw_no_stitching();
#endif
}
cv::PlaneWarperGpu* cvePlaneWarperGpuCreate(cv::WarperCreator** warperCreator)
{
#ifdef HAVE_OPENCV_STITCHING
#ifdef HAVE_OPENCV_CUDAWARPING
cv::PlaneWarperGpu* ptr = new cv::PlaneWarperGpu();
*warperCreator = dynamic_cast<cv::WarperCreator*>(ptr);
return ptr;
#else
throw_no_cudawarping();
#endif
#else
throw_no_stitching();
#endif
}
void cvePlaneWarperGpuRelease(cv::PlaneWarperGpu** warperCreator)
{
#ifdef HAVE_OPENCV_STITCHING
#ifdef HAVE_OPENCV_CUDAWARPING
@ -991,12 +1198,11 @@ void cvePlaneWarperGpuRelease(cv::detail::PlaneWarperGpu** warper)
#endif
}
cv::detail::CylindricalWarperGpu* cveCylindricalWarperGpuCreate(float scale, cv::WarperCreator** creator, cv::detail::RotationWarper** rotationWarper)
cv::detail::CylindricalWarperGpu* cveDetailCylindricalWarperGpuCreate(float scale, cv::detail::RotationWarper** rotationWarper)
{
#ifdef HAVE_OPENCV_STITCHING
#ifdef HAVE_OPENCV_CUDAWARPING
cv::detail::CylindricalWarperGpu* ptr = new cv::detail::CylindricalWarperGpu(scale);
*creator = dynamic_cast<cv::WarperCreator*>(ptr);
*rotationWarper = dynamic_cast<cv::detail::RotationWarper*>(ptr);
return ptr;
#else
@ -1006,7 +1212,34 @@ cv::detail::CylindricalWarperGpu* cveCylindricalWarperGpuCreate(float scale, cv:
throw_no_stitching();
#endif
}
void cveCylindricalWarperGpuRelease(cv::detail::CylindricalWarperGpu** warper)
void cveDetailCylindricalWarperGpuRelease(cv::detail::CylindricalWarperGpu** warper)
{
#ifdef HAVE_OPENCV_STITCHING
#ifdef HAVE_OPENCV_CUDAWARPING
delete* warper;
*warper = 0;
#else
throw_no_cudawarping();
#endif
#else
throw_no_stitching();
#endif
}
cv::CylindricalWarperGpu* cveCylindricalWarperGpuCreate(cv::WarperCreator** warperCreator)
{
#ifdef HAVE_OPENCV_STITCHING
#ifdef HAVE_OPENCV_CUDAWARPING
cv::CylindricalWarperGpu* ptr = new cv::CylindricalWarperGpu();
*warperCreator = dynamic_cast<cv::WarperCreator*>(ptr);
return ptr;
#else
throw_no_cudawarping();
#endif
#else
throw_no_stitching();
#endif
}
void cveCylindricalWarperGpuRelease(cv::CylindricalWarperGpu** warperCreator)
{
#ifdef HAVE_OPENCV_STITCHING
#ifdef HAVE_OPENCV_CUDAWARPING
@ -1020,12 +1253,11 @@ void cveCylindricalWarperGpuRelease(cv::detail::CylindricalWarperGpu** warper)
#endif
}
cv::detail::SphericalWarperGpu* cveSphericalWarperGpuCreate(float scale, cv::WarperCreator** creator, cv::detail::RotationWarper** rotationWarper)
cv::detail::SphericalWarperGpu* cveDetailSphericalWarperGpuCreate(float scale, cv::detail::RotationWarper** rotationWarper)
{
#ifdef HAVE_OPENCV_STITCHING
#ifdef HAVE_OPENCV_CUDAWARPING
cv::detail::SphericalWarperGpu* ptr = new cv::detail::SphericalWarperGpu(scale);
*creator = dynamic_cast<cv::WarperCreator*>(ptr);
*rotationWarper = dynamic_cast<cv::detail::RotationWarper*>(ptr);
return ptr;
#else
@ -1035,7 +1267,7 @@ cv::detail::SphericalWarperGpu* cveSphericalWarperGpuCreate(float scale, cv::War
throw_no_stitching();
#endif
}
void cveSphericalWarperGpuRelease(cv::detail::SphericalWarperGpu** warper)
void cveDetailSphericalWarperGpuRelease(cv::detail::SphericalWarperGpu** warper)
{
#ifdef HAVE_OPENCV_STITCHING
#ifdef HAVE_OPENCV_CUDAWARPING
@ -1049,3 +1281,30 @@ void cveSphericalWarperGpuRelease(cv::detail::SphericalWarperGpu** warper)
#endif
}
cv::SphericalWarperGpu* cveSphericalWarperGpuCreate(cv::WarperCreator** warperCreator)
{
#ifdef HAVE_OPENCV_STITCHING
#ifdef HAVE_OPENCV_CUDAWARPING
cv::SphericalWarperGpu* ptr = new cv::SphericalWarperGpu();
*warperCreator = dynamic_cast<cv::WarperCreator*>(ptr);
return ptr;
#else
throw_no_cudawarping();
#endif
#else
throw_no_stitching();
#endif
}
void cveSphericalWarperGpuRelease(cv::SphericalWarperGpu** warper)
{
#ifdef HAVE_OPENCV_STITCHING
#ifdef HAVE_OPENCV_CUDAWARPING
delete* warper;
*warper = 0;
#else
throw_no_cudawarping();
#endif
#else
throw_no_stitching();
#endif
}

102
Emgu.CV.Extern/stitching/stitching_c.h

@ -69,6 +69,12 @@ namespace cv
#ifndef HAVE_OPENCV_CUDAWARPING
static inline CV_NORETURN void throw_no_cudawarping() { CV_Error(cv::Error::StsBadFunc, "The library is compiled without CUDA Warping support"); }
namespace cv
{
class PlaneWarperGpu {};
class CylindricalWarperGpu {};
class SphericalWarperGpu {};
}
#endif
CVAPI(cv::Stitcher*) cveStitcherCreate(int mode, cv::Ptr<cv::Stitcher>** sharedPtr);
@ -146,36 +152,56 @@ CVAPI(void) cveAKAZEFeaturesFinderRelease(cv::detail::AKAZEFeaturesFinder** find
CVAPI(void) cveRotationWarperBuildMaps(cv::detail::RotationWarper* warper, CvSize* srcSize, cv::_InputArray* K, cv::_InputArray* R, cv::_OutputArray* xmap, cv::_OutputArray* ymap, CvRect* boundingBox);
CVAPI(void) cveRotationWarperWarp(cv::detail::RotationWarper* warper, cv::_InputArray* src, cv::_InputArray* K, cv::_InputArray* R, int interpMode, int borderMode, cv::_OutputArray* dst, CvPoint* corner);
CVAPI(cv::detail::PlaneWarper*) cvePlaneWarperCreate(float scale, cv::WarperCreator** creator, cv::detail::RotationWarper** rotationWarper);
CVAPI(void) cvePlaneWarperRelease(cv::detail::PlaneWarper** warper);
CVAPI(cv::detail::CylindricalWarper*) cveCylindricalWarperCreate(float scale, cv::WarperCreator** creator, cv::detail::RotationWarper** rotationWarper);
CVAPI(void) cveCylindricalWarperRelease(cv::detail::CylindricalWarper** warper);
CVAPI(cv::detail::SphericalWarper*) cveSphericalWarperCreate(float scale, cv::WarperCreator** creator, cv::detail::RotationWarper** rotationWarper);
CVAPI(void) cveSphericalWarperRelease(cv::detail::SphericalWarper** warper);
CVAPI(cv::detail::FisheyeWarper*) cveFisheyeWarperCreate(float scale, cv::WarperCreator** creator, cv::detail::RotationWarper** rotationWarper);
CVAPI(void) cveFisheyeWarperRelease(cv::detail::FisheyeWarper** warper);
CVAPI(cv::detail::StereographicWarper*) cveStereographicWarperCreate(float scale, cv::WarperCreator** creator, cv::detail::RotationWarper** rotationWarper);
CVAPI(void) cveStereographicWarperRelease(cv::detail::StereographicWarper** warper);
CVAPI(cv::detail::CompressedRectilinearWarper*) cveCompressedRectilinearWarperCreate(float scale, cv::WarperCreator** creator, cv::detail::RotationWarper** rotationWarper);
CVAPI(void) cveCompressedRectilinearWarperRelease(cv::detail::CompressedRectilinearWarper** warper);
CVAPI(cv::detail::PaniniWarper*) cvePaniniWarperCreate(float scale, cv::WarperCreator** creator, cv::detail::RotationWarper** rotationWarper);
CVAPI(void) cvePaniniWarperRelease(cv::detail::PaniniWarper** warper);
CVAPI(cv::detail::PaniniPortraitWarper*) cvePaniniPortraitWarperCreate(float scale, cv::WarperCreator** creator, cv::detail::RotationWarper** rotationWarper);
CVAPI(void) cvePaniniPortraitWarperRelease(cv::detail::PaniniPortraitWarper** warper);
CVAPI(cv::detail::MercatorWarper*) cveMercatorWarperCreate(float scale, cv::WarperCreator** creator, cv::detail::RotationWarper** rotationWarper);
CVAPI(void) cveMercatorWarperRelease(cv::detail::MercatorWarper** warper);
CVAPI(cv::detail::TransverseMercatorWarper*) cveTransverseMercatorWarperCreate(float scale, cv::WarperCreator** creator, cv::detail::RotationWarper** rotationWarper);
CVAPI(void) cveTransverseMercatorWarperRelease(cv::detail::TransverseMercatorWarper** warper);
CVAPI(cv::detail::PlaneWarper*) cveDetailPlaneWarperCreate(float scale, cv::detail::RotationWarper** rotationWarper);
CVAPI(void) cveDetailPlaneWarperRelease(cv::detail::PlaneWarper** warper);
CVAPI(cv::PlaneWarper*) cvePlaneWraperCreate(cv::WarperCreator** warperCreator);
CVAPI(void) cvePlaneWarperRelease(cv::PlaneWarper** warper);
CVAPI(cv::detail::CylindricalWarper*) cveDetailCylindricalWarperCreate(float scale, cv::detail::RotationWarper** rotationWarper);
CVAPI(void) cveDetailCylindricalWarperRelease(cv::detail::CylindricalWarper** warper);
CVAPI(cv::CylindricalWarper*) cveCylindricalWarperCreate(cv::WarperCreator** warperCreator);
CVAPI(void) cveCylindricalWarperRelease(cv::CylindricalWarper** warper);
CVAPI(cv::detail::SphericalWarper*) cveDetailSphericalWarperCreate(float scale, cv::detail::RotationWarper** rotationWarper);
CVAPI(void) cveDetailSphericalWarperRelease(cv::detail::SphericalWarper** warper);
CVAPI(cv::SphericalWarper*) cveSphericalWarperCreate(cv::WarperCreator** warperCreator);
CVAPI(void) cveSphericalWarperRelease(cv::SphericalWarper** warperCreator);
CVAPI(cv::detail::FisheyeWarper*) cveDetailFisheyeWarperCreate(float scale, cv::detail::RotationWarper** rotationWarper);
CVAPI(void) cveDetailFisheyeWarperRelease(cv::detail::FisheyeWarper** warper);
CVAPI(cv::FisheyeWarper*) cveFisheyeWarperCreate(cv::WarperCreator** warperCreator);
CVAPI(void) cveFisheyeWarperRelease(cv::FisheyeWarper** warperCreator);
CVAPI(cv::detail::StereographicWarper*) cveDetailStereographicWarperCreate(float scale, cv::detail::RotationWarper** rotationWarper);
CVAPI(void) cveDetailStereographicWarperRelease(cv::detail::StereographicWarper** warper);
CVAPI(cv::StereographicWarper*) cveStereographicWarperCreate(cv::WarperCreator** warperCreator);
CVAPI(void) cveStereographicWarperRelease(cv::StereographicWarper** warperCreator);
CVAPI(cv::detail::CompressedRectilinearWarper*) cveDetailCompressedRectilinearWarperCreate(float scale, cv::detail::RotationWarper** rotationWarper);
CVAPI(void) cveDetailCompressedRectilinearWarperRelease(cv::detail::CompressedRectilinearWarper** warper);
CVAPI(cv::CompressedRectilinearWarper*) cveCompressedRectilinearWarperCreate(cv::WarperCreator** warperCreator);
CVAPI(void) cveCompressedRectilinearWarperRelease(cv::CompressedRectilinearWarper** warperCreator);
CVAPI(cv::detail::PaniniWarper*) cveDetailPaniniWarperCreate(float scale, cv::detail::RotationWarper** rotationWarper);
CVAPI(void) cveDetailPaniniWarperRelease(cv::detail::PaniniWarper** warper);
CVAPI(cv::PaniniWarper*) cvePaniniWarperCreate(cv::WarperCreator** warperCreator);
CVAPI(void) cvePaniniWarperRelease(cv::PaniniWarper** warperCreator);
CVAPI(cv::detail::PaniniPortraitWarper*) cveDetailPaniniPortraitWarperCreate(float scale, cv::detail::RotationWarper** rotationWarper);
CVAPI(void) cveDetailPaniniPortraitWarperRelease(cv::detail::PaniniPortraitWarper** warper);
CVAPI(cv::PaniniPortraitWarper*) cvePaniniPortraitWarperCreate(cv::WarperCreator** warperCreator);
CVAPI(void) cvePaniniPortraitWarperRelease(cv::PaniniPortraitWarper** warperCreator);
CVAPI(cv::detail::MercatorWarper*) cveDetailMercatorWarperCreate(float scale, cv::detail::RotationWarper** rotationWarper);
CVAPI(void) cveDetailMercatorWarperRelease(cv::detail::MercatorWarper** warper);
CVAPI(cv::MercatorWarper*) cveMercatorWarperCreate(cv::WarperCreator** warperCreator);
CVAPI(void) cveMercatorWarperRelease(cv::MercatorWarper** warperCreator);
CVAPI(cv::detail::TransverseMercatorWarper*) cveDetailTransverseMercatorWarperCreate(float scale, cv::detail::RotationWarper** rotationWarper);
CVAPI(void) cveDetailTransverseMercatorWarperRelease(cv::detail::TransverseMercatorWarper** warper);
CVAPI(cv::TransverseMercatorWarper*) cveTransverseMercatorWarperCreate(cv::WarperCreator** warperCreator);
CVAPI(void) cveTransverseMercatorWarperRelease(cv::TransverseMercatorWarper** warperCreator);
CVAPI(cv::detail::FeatherBlender*) cveFeatherBlenderCreate(float sharpness, cv::detail::Blender** blender);
CVAPI(void) cveFeatherBlenderRelease(cv::detail::FeatherBlender** blender);
@ -278,14 +304,18 @@ CVAPI(cv::detail::BestOf2NearestRangeMatcher*) cveBestOf2NearestRangeMatcherCrea
CVAPI(void) cveBestOf2NearestRangeMatcherRelease(cv::detail::BestOf2NearestRangeMatcher** featuresMatcher);
*/
CVAPI(cv::detail::PlaneWarperGpu*) cvePlaneWarperGpuCreate(float scale, cv::WarperCreator** creator, cv::detail::RotationWarper** rotationWarper);
CVAPI(void) cvePlaneWarperGpuRelease(cv::detail::PlaneWarperGpu** warper);
CVAPI(cv::detail::PlaneWarperGpu*) cveDetailPlaneWarperGpuCreate(float scale, cv::detail::RotationWarper** rotationWarper);
CVAPI(void) cveDetailPlaneWarperGpuRelease(cv::detail::PlaneWarperGpu** warper);
CVAPI(cv::PlaneWarperGpu*) cvePlaneWarperGpuCreate(cv::WarperCreator** warperCreator);
CVAPI(void) cvePlaneWarperGpuRelease(cv::PlaneWarperGpu** warperCreator);
CVAPI(cv::detail::CylindricalWarperGpu*) cveCylindricalWarperGpuCreate(float scale, cv::WarperCreator** creator, cv::detail::RotationWarper** rotationWarper);
CVAPI(void) cveCylindricalWarperGpuRelease(cv::detail::CylindricalWarperGpu** warper);
CVAPI(cv::detail::CylindricalWarperGpu*) cveDetailCylindricalWarperGpuCreate(float scale, cv::detail::RotationWarper** rotationWarper);
CVAPI(void) cveDetailCylindricalWarperGpuRelease(cv::detail::CylindricalWarperGpu** warper);
CVAPI(cv::CylindricalWarperGpu*) cveCylindricalWarperGpuCreate(cv::WarperCreator** warperCreator);
CVAPI(void) cveCylindricalWarperGpuRelease(cv::CylindricalWarperGpu** warperCreator);
CVAPI(cv::detail::SphericalWarperGpu*) cveSphericalWarperGpuCreate(float scale, cv::WarperCreator** creator, cv::detail::RotationWarper** rotationWarper);
CVAPI(void) cveSphericalWarperGpuRelease(cv::detail::SphericalWarperGpu** warper);
CVAPI(cv::detail::SphericalWarperGpu*) cveDetailSphericalWarperGpuCreate(float scale, cv::detail::RotationWarper** rotationWarper);
CVAPI(void) cveDetailSphericalWarperGpuRelease(cv::detail::SphericalWarperGpu** warper);
#endif

34
Emgu.CV.Test/AutoTestVarious.cs

@ -2873,6 +2873,40 @@ namespace Emgu.CV.Test
}
}
[Test]
public void TestStitching5()
{
Mat[] images = new Mat[4];
images[0] = EmguAssert.LoadMat("stitch1.jpg");
images[1] = EmguAssert.LoadMat("stitch2.jpg");
images[2] = EmguAssert.LoadMat("stitch3.jpg");
images[3] = EmguAssert.LoadMat("stitch4.jpg");
using (Stitcher stitcher = new Stitcher(Stitcher.Mode.Panorama))
using (ORBDetector detector = new ORBDetector())
using (SphericalWarper warper = new SphericalWarper())
using (SeamFinder finder = new GraphCutSeamFinder())
using (BlocksChannelsCompensator compensator = new BlocksChannelsCompensator())
using (FeatherBlender blender = new FeatherBlender())
{
stitcher.SetFeaturesFinder(detector);
stitcher.SetWarper(warper);
stitcher.SetSeamFinder(finder);
stitcher.SetExposureCompensator(compensator);
stitcher.SetBlender(blender);
Mat result = new Mat();
using (VectorOfMat vm = new VectorOfMat())
{
vm.Push(images);
stitcher.Stitch(vm, result);
}
//Emgu.CV.UI.ImageViewer.Show(result);
}
}
/*
[Test]
public void TestStitching5()

525
Emgu.CV/Stitching/RotationWarper.cs

@ -0,0 +1,525 @@
//----------------------------------------------------------------------------
// Copyright (C) 2004-2020 by EMGU Corporation. All rights reserved.
//----------------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Text;
using System.Drawing;
using Emgu.CV.Structure;
using Emgu.CV.Util;
using Emgu.Util;
namespace Emgu.CV.Stitching
{
/// <summary>
/// Rotation-only model image warper interface.
/// </summary>
public abstract class RotationWarper : UnmanagedObject
{
/// <summary>
/// Pointer to the unmanaged RotationWarper object
/// </summary>
protected IntPtr _rotationWarper;
/// <summary>
/// Reset the unmanaged pointer associated to this object
/// </summary>
protected override void DisposeObject()
{
if (_rotationWarper != IntPtr.Zero)
_rotationWarper = IntPtr.Zero;
}
/// <summary>
/// Builds the projection maps according to the given camera data.
/// </summary>
/// <param name="srcSize">Source image size</param>
/// <param name="K">Camera intrinsic parameters</param>
/// <param name="R">Camera rotation matrix</param>
/// <param name="xmap">Projection map for the x axis</param>
/// <param name="ymap">Projection map for the y axis</param>
/// <returns>Projected image minimum bounding box</returns>
public Rectangle BuildMaps(Size srcSize, IInputArray K, IInputArray R, IOutputArray xmap, IOutputArray ymap)
{
Rectangle result = new Rectangle();
using (InputArray iaK = K.GetInputArray())
using (InputArray iaR = R.GetInputArray())
using (OutputArray oaXmap = xmap.GetOutputArray())
using (OutputArray oaYmap = ymap.GetOutputArray())
{
StitchingInvoke.cveRotationWarperBuildMaps(_rotationWarper, ref srcSize, iaK, iaR, oaXmap, oaYmap, ref result);
return result;
}
}
/// <summary>
/// Projects the image.
/// </summary>
/// <param name="src">Source image</param>
/// <param name="K">Camera intrinsic parameters</param>
/// <param name="R">Camera rotation matrix</param>
/// <param name="interpMode">Interpolation mode</param>
/// <param name="borderMode">Border extrapolation mode</param>
/// <param name="dst">Projected image</param>
/// <returns>Project image top-left corner</returns>
public Point Warp(IInputArray src, IInputArray K, IInputArray R, CvEnum.Inter interpMode, CvEnum.BorderType borderMode, IOutputArray dst)
{
Point corner = new Point();
using (InputArray iaSrc = src.GetInputArray())
using (InputArray iaK = K.GetInputArray())
using (InputArray iaR = R.GetInputArray())
using (OutputArray oaDst = dst.GetOutputArray())
{
StitchingInvoke.cveRotationWarperWarp(_rotationWarper, iaSrc, iaK, iaR, interpMode, borderMode, oaDst, ref corner);
return corner;
}
}
}
/// <summary>
/// Warper that maps an image onto the z = 1 plane.
/// </summary>
public class DetailPlaneWarper : RotationWarper
{
/// <summary>
/// Construct an instance of the plane warper class.
/// </summary>
/// <param name="scale">Projected image scale multiplier</param>
public DetailPlaneWarper(float scale)
{
_ptr = StitchingInvoke.cveDetailPlaneWarperCreate(scale, ref _rotationWarper);
}
/// <summary>
/// Release the unmanaged memory associated with this warper
/// </summary>
protected override void DisposeObject()
{
base.DisposeObject();
if (_ptr != IntPtr.Zero)
{
StitchingInvoke.cveDetailPlaneWarperRelease(ref _ptr);
}
}
}
/// <summary>
/// Warper that maps an image onto the x\*x + z\*z = 1 cylinder.
/// </summary>
public class DetailCylindricalWarper : RotationWarper
{
/// <summary>
/// Construct an instance of the cylindrical warper class.
/// </summary>
/// <param name="scale">Projected image scale multiplier</param>
public DetailCylindricalWarper(float scale)
{
_ptr = StitchingInvoke.cveDetailCylindricalWarperCreate(scale, ref _rotationWarper);
}
/// <summary>
/// Release the unmanaged memory associated with this warper
/// </summary>
protected override void DisposeObject()
{
base.DisposeObject();
if (_ptr != IntPtr.Zero)
{
StitchingInvoke.cveDetailCylindricalWarperRelease(ref _ptr);
}
}
}
/// <summary>
/// Warper that maps an image onto the unit sphere located at the origin.
/// </summary>
public class DetailSphericalWarper : RotationWarper
{
/// <summary>
/// Construct an instance of the spherical warper class.
/// </summary>
/// <param name="scale">Radius of the projected sphere, in pixels. An image spanning the whole sphere will have a width of 2 * scale * PI pixels.</param>
public DetailSphericalWarper(float scale)
{
_ptr = StitchingInvoke.cveDetailSphericalWarperCreate(scale, ref _rotationWarper);
}
/// <summary>
/// Release the unmanaged memory associated with this warper
/// </summary>
protected override void DisposeObject()
{
base.DisposeObject();
if (_ptr != IntPtr.Zero)
{
StitchingInvoke.cveDetailSphericalWarperRelease(ref _ptr);
}
}
}
/// <summary>
/// Fisheye Warper
/// </summary>
public class DetailFisheyeWarper : RotationWarper
{
/// <summary>
/// Create a fisheye warper
/// </summary>
/// <param name="scale">Projected image scale multiplier</param>
public DetailFisheyeWarper(float scale)
{
_ptr = StitchingInvoke.cveDetailFisheyeWarperCreate(scale, ref _rotationWarper);
}
/// <summary>
/// Release the unmanaged memory associated with this warper
/// </summary>
protected override void DisposeObject()
{
base.DisposeObject();
if (_ptr != IntPtr.Zero)
{
StitchingInvoke.cveDetailFisheyeWarperRelease(ref _ptr);
}
}
}
/// <summary>
/// Stereographic Warper
/// </summary>
public class DetailStereographicWarper : RotationWarper
{
/// <summary>
/// Create a stereographic warper
/// </summary>
/// <param name="scale">Projected image scale multiplier</param>
public DetailStereographicWarper(float scale)
{
_ptr = StitchingInvoke.cveDetailStereographicWarperCreate(scale, ref _rotationWarper);
}
/// <summary>
/// Release the unmanaged memory associated with this warper
/// </summary>
protected override void DisposeObject()
{
base.DisposeObject();
if (_ptr != IntPtr.Zero)
{
StitchingInvoke.cveDetailStereographicWarperRelease(ref _ptr);
}
}
}
/// <summary>
/// Compressed rectilinear warper
/// </summary>
public class DetailCompressedRectilinearWarper : RotationWarper
{
/// <summary>
/// Create a compressed rectilinear warper
/// </summary>
/// <param name="scale">Projected image scale multiplier</param>
public DetailCompressedRectilinearWarper(float scale)
{
_ptr = StitchingInvoke.cveDetailCompressedRectilinearWarperCreate(scale, ref _rotationWarper);
}
/// <summary>
/// Release the unmanaged memory associated with this warper
/// </summary>
protected override void DisposeObject()
{
base.DisposeObject();
if (_ptr != IntPtr.Zero)
{
StitchingInvoke.cveDetailCompressedRectilinearWarperRelease(ref _ptr);
}
}
}
/// <summary>
/// Panini warper
/// </summary>
public class DetailPaniniWarper : RotationWarper
{
/// <summary>
/// Create a Panini warper
/// </summary>
/// <param name="scale">Projected image scale multiplier</param>
public DetailPaniniWarper(float scale)
{
_ptr = StitchingInvoke.cveDetailPaniniWarperCreate(scale, ref _rotationWarper);
}
/// <summary>
/// Release the unmanaged memory associated with this warper
/// </summary>
protected override void DisposeObject()
{
base.DisposeObject();
if (_ptr != IntPtr.Zero)
{
StitchingInvoke.cveDetailPaniniWarperRelease(ref _ptr);
}
}
}
/// <summary>
/// Panini portrait warper
/// </summary>
public class DetailPaniniPortraitWarper : RotationWarper
{
/// <summary>
/// Create a panini portrait warper
/// </summary>
/// <param name="scale">Projected image scale multiplier</param>
public DetailPaniniPortraitWarper(float scale)
{
_ptr = StitchingInvoke.cveDetailPaniniPortraitWarperCreate(scale, ref _rotationWarper);
}
/// <summary>
/// Release the unmanaged memory associated with this warper
/// </summary>
protected override void DisposeObject()
{
base.DisposeObject();
if (_ptr != IntPtr.Zero)
{
StitchingInvoke.cveDetailPaniniPortraitWarperRelease(ref _ptr);
}
}
}
/// <summary>
/// Mercator warper
/// </summary>
public class DetailMercatorWarper : RotationWarper
{
/// <summary>
/// Create a Mercator Warper
/// </summary>
/// <param name="scale">Projected image scale multiplier</param>
public DetailMercatorWarper(float scale)
{
_ptr = StitchingInvoke.cveDetailMercatorWarperCreate(scale, ref _rotationWarper);
}
/// <summary>
/// Release the unmanaged memory associated with this warper
/// </summary>
protected override void DisposeObject()
{
base.DisposeObject();
if (_ptr != IntPtr.Zero)
{
StitchingInvoke.cveDetailMercatorWarperRelease(ref _ptr);
}
}
}
/// <summary>
/// Transverse mercator warper
/// </summary>
public class DetailTransverseMercatorWarper : RotationWarper
{
/// <summary>
/// Create a transverse mercator warper
/// </summary>
/// <param name="scale">Projected image scale multiplier</param>
public DetailTransverseMercatorWarper(float scale)
{
_ptr = StitchingInvoke.cveDetailTransverseMercatorWarperCreate(scale, ref _rotationWarper);
}
/// <summary>
/// Release the unmanaged memory associated with this warper
/// </summary>
protected override void DisposeObject()
{
base.DisposeObject();
if (_ptr != IntPtr.Zero)
{
StitchingInvoke.cveDetailTransverseMercatorWarperRelease(ref _ptr);
}
}
}
/// <summary>
/// Warper that maps an image onto the z = 1 plane.
/// </summary>
public class DetailPlaneWarperGpu : RotationWarper
{
/// <summary>
/// Construct an instance of the plane warper class.
/// </summary>
/// <param name="scale">Projected image scale multiplier</param>
public DetailPlaneWarperGpu(float scale)
{
_ptr = StitchingInvoke.cveDetailPlaneWarperGpuCreate(scale, ref _rotationWarper);
}
/// <summary>
/// Release the unmanaged memory associated with this warper
/// </summary>
protected override void DisposeObject()
{
base.DisposeObject();
if (_ptr != IntPtr.Zero)
{
StitchingInvoke.cveDetailPlaneWarperGpuRelease(ref _ptr);
}
}
}
/// <summary>
/// Warper that maps an image onto the x\*x + z\*z = 1 cylinder.
/// </summary>
public class DetailCylindricalWarperGpu : RotationWarper
{
/// <summary>
/// Construct an instance of the cylindrical warper class.
/// </summary>
/// <param name="scale">Projected image scale multiplier</param>
public DetailCylindricalWarperGpu(float scale)
{
_ptr = StitchingInvoke.cveDetailCylindricalWarperGpuCreate(scale, ref _rotationWarper);
}
/// <summary>
/// Release the unmanaged memory associated with this warper
/// </summary>
protected override void DisposeObject()
{
base.DisposeObject();
if (_ptr != IntPtr.Zero)
{
StitchingInvoke.cveDetailCylindricalWarperGpuRelease(ref _ptr);
}
}
}
/// <summary>
/// Warper that maps an image onto the unit sphere located at the origin.
/// </summary>
public class DetailSphericalWarperGpu : RotationWarper
{
/// <summary>
/// Construct an instance of the spherical warper class.
/// </summary>
/// <param name="scale">Radius of the projected sphere, in pixels. An image spanning the whole sphere will have a width of 2 * scale * PI pixels.</param>
public DetailSphericalWarperGpu(float scale)
{
_ptr = StitchingInvoke.cveDetailSphericalWarperGpuCreate(scale, ref _rotationWarper);
}
/// <summary>
/// Release the unmanaged memory associated with this warper
/// </summary>
protected override void DisposeObject()
{
base.DisposeObject();
if (_ptr != IntPtr.Zero)
{
StitchingInvoke.cveDetailSphericalWarperGpuRelease(ref _ptr);
}
}
}
public static partial class StitchingInvoke
{
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern IntPtr cveDetailPlaneWarperCreate(float scale, ref IntPtr rotationWarper);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern void cveDetailPlaneWarperRelease(ref IntPtr warper);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern IntPtr cveDetailCylindricalWarperCreate(float scale, ref IntPtr rotationWarper);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern void cveDetailCylindricalWarperRelease(ref IntPtr warper);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern IntPtr cveDetailSphericalWarperCreate(float scale, ref IntPtr rotationWarper);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern void cveDetailSphericalWarperRelease(ref IntPtr warper);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern IntPtr cveDetailFisheyeWarperCreate(float scale, ref IntPtr rotationWarper);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern void cveDetailFisheyeWarperRelease(ref IntPtr warper);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern IntPtr cveDetailStereographicWarperCreate(float scale, ref IntPtr rotationWarper);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern void cveDetailStereographicWarperRelease(ref IntPtr warper);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern IntPtr cveDetailCompressedRectilinearWarperCreate(float scale, ref IntPtr rotationWarper);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern void cveDetailCompressedRectilinearWarperRelease(ref IntPtr warper);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern IntPtr cveDetailPaniniWarperCreate(float scale, ref IntPtr rotationWarper);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern void cveDetailPaniniWarperRelease(ref IntPtr warper);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern IntPtr cveDetailPaniniPortraitWarperCreate(float scale, ref IntPtr rotationWarper);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern void cveDetailPaniniPortraitWarperRelease(ref IntPtr warper);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern IntPtr cveDetailMercatorWarperCreate(float scale, ref IntPtr rotationWarper);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern void cveDetailMercatorWarperRelease(ref IntPtr warper);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern IntPtr cveDetailTransverseMercatorWarperCreate(float scale, ref IntPtr rotationWarper);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern void cveDetailTransverseMercatorWarperRelease(ref IntPtr warper);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern void cveRotationWarperBuildMaps(IntPtr warper, ref Size srcSize, IntPtr K, IntPtr R, IntPtr xmap, IntPtr ymap, ref Rectangle boundingBox);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern void cveRotationWarperWarp(IntPtr warper, IntPtr src, IntPtr K, IntPtr R, CvEnum.Inter interpMode, CvEnum.BorderType borderMode, IntPtr dst, ref Point corner);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern IntPtr cveDetailPlaneWarperGpuCreate(float scale, ref IntPtr rotationWarper);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern void cveDetailPlaneWarperGpuRelease(ref IntPtr warper);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern IntPtr cveDetailCylindricalWarperGpuCreate(float scale, ref IntPtr rotationWarper);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern void cveDetailCylindricalWarperGpuRelease(ref IntPtr warper);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern IntPtr cveDetailSphericalWarperGpuCreate(float scale, ref IntPtr rotationWarper);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern void cveDetailSphericalWarperGpuRelease(ref IntPtr warper);
}
}

191
Emgu.CV/Stitching/WarperCreator.cs

@ -13,27 +13,19 @@ using Emgu.Util;
namespace Emgu.CV.Stitching
{
/// <summary>
/// Finds features in the given image.
/// </summary>
public abstract class WarperCreator : UnmanagedObject
{
/// <summary>
/// Pointer to the unmanaged WarperCreator object
/// </summary>
protected IntPtr _warperCreatorPtr;
protected IntPtr _warperCreator;
/// <summary>
/// Pointer to the unmanaged RotationWarper object
/// </summary>
protected IntPtr _rotationWarper;
/// <summary>
/// Get a pointer to the unmanaged WarperCreator object
/// Pointer to the unmanaged WarperCreator object
/// </summary>
public IntPtr WarperCreatorPtr
{
get { return _warperCreatorPtr; }
get { return _warperCreator; }
}
/// <summary>
@ -41,56 +33,8 @@ namespace Emgu.CV.Stitching
/// </summary>
protected override void DisposeObject()
{
if (_rotationWarper != IntPtr.Zero)
_rotationWarper = IntPtr.Zero;
if (_warperCreatorPtr != IntPtr.Zero)
_warperCreatorPtr = IntPtr.Zero;
}
/// <summary>
/// Builds the projection maps according to the given camera data.
/// </summary>
/// <param name="srcSize">Source image size</param>
/// <param name="K">Camera intrinsic parameters</param>
/// <param name="R">Camera rotation matrix</param>
/// <param name="xmap">Projection map for the x axis</param>
/// <param name="ymap">Projection map for the y axis</param>
/// <returns>Projected image minimum bounding box</returns>
public Rectangle BuildMaps(Size srcSize, IInputArray K, IInputArray R, IOutputArray xmap, IOutputArray ymap)
{
Rectangle result = new Rectangle();
using (InputArray iaK = K.GetInputArray())
using (InputArray iaR = R.GetInputArray())
using (OutputArray oaXmap = xmap.GetOutputArray())
using (OutputArray oaYmap = ymap.GetOutputArray())
{
StitchingInvoke.cveRotationWarperBuildMaps(_rotationWarper, ref srcSize, iaK, iaR, oaXmap, oaYmap, ref result);
return result;
}
}
/// <summary>
/// Projects the image.
/// </summary>
/// <param name="src">Source image</param>
/// <param name="K">Camera intrinsic parameters</param>
/// <param name="R">Camera rotation matrix</param>
/// <param name="interpMode">Interpolation mode</param>
/// <param name="borderMode">Border extrapolation mode</param>
/// <param name="dst">Projected image</param>
/// <returns>Project image top-left corner</returns>
public Point Warp(IInputArray src, IInputArray K, IInputArray R, CvEnum.Inter interpMode, CvEnum.BorderType borderMode, IOutputArray dst)
{
Point corner = new Point();
using (InputArray iaSrc = src.GetInputArray())
using (InputArray iaK = K.GetInputArray())
using (InputArray iaR = R.GetInputArray())
using (OutputArray oaDst = dst.GetOutputArray())
{
StitchingInvoke.cveRotationWarperWarp(_rotationWarper, iaSrc, iaK, iaR, interpMode, borderMode, oaDst, ref corner);
return corner;
}
if (_warperCreator != IntPtr.Zero)
_warperCreator = IntPtr.Zero;
}
}
@ -102,14 +46,13 @@ namespace Emgu.CV.Stitching
/// <summary>
/// Construct an instance of the plane warper class.
/// </summary>
/// <param name="scale">Projected image scale multiplier</param>
public PlaneWarper(float scale)
public PlaneWarper()
{
_ptr = StitchingInvoke.cvePlaneWarperCreate(scale, ref _warperCreatorPtr, ref _rotationWarper);
_ptr = StitchingInvoke.cvePlaneWarperCreate(ref _warperCreator);
}
/// <summary>
/// Release the unmanaged memory associated with this wraper
/// Release the unmanaged memory associated with this warper
/// </summary>
protected override void DisposeObject()
{
@ -130,14 +73,13 @@ namespace Emgu.CV.Stitching
/// <summary>
/// Construct an instance of the cylindrical warper class.
/// </summary>
/// <param name="scale">Projected image scale multiplier</param>
public CylindricalWarper(float scale)
public CylindricalWarper()
{
_ptr = StitchingInvoke.cveCylindricalWarperCreate(scale, ref _warperCreatorPtr, ref _rotationWarper);
_ptr = StitchingInvoke.cveCylindricalWarperCreate(ref _warperCreator);
}
/// <summary>
/// Release the unmanaged memory associated with this wraper
/// Release the unmanaged memory associated with this warper
/// </summary>
protected override void DisposeObject()
{
@ -157,14 +99,13 @@ namespace Emgu.CV.Stitching
/// <summary>
/// Construct an instance of the spherical warper class.
/// </summary>
/// <param name="scale">Radius of the projected sphere, in pixels. An image spanning the whole sphere will have a width of 2 * scale * PI pixels.</param>
public SphericalWarper(float scale)
public SphericalWarper()
{
_ptr = StitchingInvoke.cveSphericalWarperCreate(scale, ref _warperCreatorPtr, ref _rotationWarper);
_ptr = StitchingInvoke.cveSphericalWarperCreate(ref _warperCreator);
}
/// <summary>
/// Release the unmanaged memory associated with this wraper
/// Release the unmanaged memory associated with this warper
/// </summary>
protected override void DisposeObject()
{
@ -184,14 +125,13 @@ namespace Emgu.CV.Stitching
/// <summary>
/// Create a fisheye warper
/// </summary>
/// <param name="scale">Projected image scale multiplier</param>
public FisheyeWarper(float scale)
public FisheyeWarper()
{
_ptr = StitchingInvoke.cveFisheyeWarperCreate(scale, ref _warperCreatorPtr, ref _rotationWarper);
_ptr = StitchingInvoke.cveFisheyeWarperCreate(ref _warperCreator);
}
/// <summary>
/// Release the unmanaged memory associated with this wraper
/// Release the unmanaged memory associated with this warper
/// </summary>
protected override void DisposeObject()
{
@ -211,14 +151,13 @@ namespace Emgu.CV.Stitching
/// <summary>
/// Create a stereographic warper
/// </summary>
/// <param name="scale">Projected image scale multiplier</param>
public StereographicWarper(float scale)
public StereographicWarper()
{
_ptr = StitchingInvoke.cveStereographicWarperCreate(scale, ref _warperCreatorPtr, ref _rotationWarper);
_ptr = StitchingInvoke.cveStereographicWarperCreate(ref _warperCreator);
}
/// <summary>
/// Release the unmanaged memory associated with this wraper
/// Release the unmanaged memory associated with this warper
/// </summary>
protected override void DisposeObject()
{
@ -238,14 +177,13 @@ namespace Emgu.CV.Stitching
/// <summary>
/// Create a compressed rectilinear warper
/// </summary>
/// <param name="scale">Projected image scale multiplier</param>
public CompressedRectilinearWarper(float scale)
public CompressedRectilinearWarper()
{
_ptr = StitchingInvoke.cveCompressedRectilinearWarperCreate(scale, ref _warperCreatorPtr, ref _rotationWarper);
_ptr = StitchingInvoke.cveCompressedRectilinearWarperCreate(ref _warperCreator);
}
/// <summary>
/// Release the unmanaged memory associated with this wraper
/// Release the unmanaged memory associated with this warper
/// </summary>
protected override void DisposeObject()
{
@ -265,14 +203,13 @@ namespace Emgu.CV.Stitching
/// <summary>
/// Create a Panini warper
/// </summary>
/// <param name="scale">Projected image scale multiplier</param>
public PaniniWarper(float scale)
public PaniniWarper()
{
_ptr = StitchingInvoke.cvePaniniWarperCreate(scale, ref _warperCreatorPtr, ref _rotationWarper);
_ptr = StitchingInvoke.cvePaniniWarperCreate(ref _warperCreator);
}
/// <summary>
/// Release the unmanaged memory associated with this wraper
/// Release the unmanaged memory associated with this warper
/// </summary>
protected override void DisposeObject()
{
@ -292,14 +229,13 @@ namespace Emgu.CV.Stitching
/// <summary>
/// Create a panini portrait warper
/// </summary>
/// <param name="scale">Projected image scale multiplier</param>
public PaniniPortraitWarper(float scale)
public PaniniPortraitWarper()
{
_ptr = StitchingInvoke.cvePaniniPortraitWarperCreate(scale, ref _warperCreatorPtr, ref _rotationWarper);
_ptr = StitchingInvoke.cvePaniniPortraitWarperCreate(ref _warperCreator);
}
/// <summary>
/// Release the unmanaged memory associated with this wraper
/// Release the unmanaged memory associated with this warper
/// </summary>
protected override void DisposeObject()
{
@ -319,14 +255,13 @@ namespace Emgu.CV.Stitching
/// <summary>
/// Create a Mercator Warper
/// </summary>
/// <param name="scale">Projected image scale multiplier</param>
public MercatorWarper(float scale)
public MercatorWarper()
{
_ptr = StitchingInvoke.cveMercatorWarperCreate(scale, ref _warperCreatorPtr, ref _rotationWarper);
_ptr = StitchingInvoke.cveMercatorWarperCreate(ref _warperCreator);
}
/// <summary>
/// Release the unmanaged memory associated with this wraper
/// Release the unmanaged memory associated with this warper
/// </summary>
protected override void DisposeObject()
{
@ -346,14 +281,13 @@ namespace Emgu.CV.Stitching
/// <summary>
/// Create a transverse mercator warper
/// </summary>
/// <param name="scale">Projected image scale multiplier</param>
public TransverseMercatorWarper(float scale)
public TransverseMercatorWarper()
{
_ptr = StitchingInvoke.cveTransverseMercatorWarperCreate(scale, ref _warperCreatorPtr, ref _rotationWarper);
_ptr = StitchingInvoke.cveTransverseMercatorWarperCreate(ref _warperCreator);
}
/// <summary>
/// Release the unmanaged memory associated with this wraper
/// Release the unmanaged memory associated with this warper
/// </summary>
protected override void DisposeObject()
{
@ -373,14 +307,13 @@ namespace Emgu.CV.Stitching
/// <summary>
/// Construct an instance of the plane warper class.
/// </summary>
/// <param name="scale">Projected image scale multiplier</param>
public PlaneWarperGpu(float scale)
public PlaneWarperGpu()
{
_ptr = StitchingInvoke.cvePlaneWarperGpuCreate(scale, ref _warperCreatorPtr, ref _rotationWarper);
_ptr = StitchingInvoke.cvePlaneWarperGpuCreate(ref _warperCreator);
}
/// <summary>
/// Release the unmanaged memory associated with this wraper
/// Release the unmanaged memory associated with this warper
/// </summary>
protected override void DisposeObject()
{
@ -401,14 +334,13 @@ namespace Emgu.CV.Stitching
/// <summary>
/// Construct an instance of the cylindrical warper class.
/// </summary>
/// <param name="scale">Projected image scale multiplier</param>
public CylindricalWarperGpu(float scale)
public CylindricalWarperGpu()
{
_ptr = StitchingInvoke.cveCylindricalWarperGpuCreate(scale, ref _warperCreatorPtr, ref _rotationWarper);
_ptr = StitchingInvoke.cveCylindricalWarperGpuCreate(ref _warperCreator);
}
/// <summary>
/// Release the unmanaged memory associated with this wraper
/// Release the unmanaged memory associated with this warper
/// </summary>
protected override void DisposeObject()
{
@ -428,14 +360,13 @@ namespace Emgu.CV.Stitching
/// <summary>
/// Construct an instance of the spherical warper class.
/// </summary>
/// <param name="scale">Radius of the projected sphere, in pixels. An image spanning the whole sphere will have a width of 2 * scale * PI pixels.</param>
public SphericalWarperGpu(float scale)
public SphericalWarperGpu()
{
_ptr = StitchingInvoke.cveSphericalWarperGpuCreate(scale, ref _warperCreatorPtr, ref _rotationWarper);
_ptr = StitchingInvoke.cveSphericalWarperGpuCreate(ref _warperCreator);
}
/// <summary>
/// Release the unmanaged memory associated with this wraper
/// Release the unmanaged memory associated with this warper
/// </summary>
protected override void DisposeObject()
{
@ -447,90 +378,82 @@ namespace Emgu.CV.Stitching
}
}
public static partial class StitchingInvoke
{
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern IntPtr cvePlaneWarperCreate(float scale, ref IntPtr creator, ref IntPtr rotationWarper);
internal static extern IntPtr cvePlaneWarperCreate(ref IntPtr warperCreator);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern void cvePlaneWarperRelease(ref IntPtr warper);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern IntPtr cveCylindricalWarperCreate(float scale, ref IntPtr creator, ref IntPtr rotationWarper);
internal static extern IntPtr cveCylindricalWarperCreate(ref IntPtr warperCreator);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern void cveCylindricalWarperRelease(ref IntPtr warper);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern IntPtr cveSphericalWarperCreate(float scale, ref IntPtr creator, ref IntPtr rotationWarper);
internal static extern IntPtr cveSphericalWarperCreate(ref IntPtr warperCreator);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern void cveSphericalWarperRelease(ref IntPtr warper);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern IntPtr cveFisheyeWarperCreate(float scale, ref IntPtr creator, ref IntPtr rotationWarper);
internal static extern IntPtr cveFisheyeWarperCreate(ref IntPtr warperCreator);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern void cveFisheyeWarperRelease(ref IntPtr warper);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern IntPtr cveStereographicWarperCreate(float scale, ref IntPtr creator, ref IntPtr rotationWarper);
internal static extern IntPtr cveStereographicWarperCreate(ref IntPtr warperCreator);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern void cveStereographicWarperRelease(ref IntPtr warper);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern IntPtr cveCompressedRectilinearWarperCreate(float scale, ref IntPtr creator, ref IntPtr rotationWarper);
internal static extern IntPtr cveCompressedRectilinearWarperCreate(ref IntPtr warperCreator);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern void cveCompressedRectilinearWarperRelease(ref IntPtr warper);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern IntPtr cvePaniniWarperCreate(float scale, ref IntPtr creator, ref IntPtr rotationWarper);
internal static extern IntPtr cvePaniniWarperCreate(ref IntPtr warperCreator);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern void cvePaniniWarperRelease(ref IntPtr warper);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern IntPtr cvePaniniPortraitWarperCreate(float scale, ref IntPtr creator, ref IntPtr rotationWarper);
internal static extern IntPtr cvePaniniPortraitWarperCreate(ref IntPtr warperCreator);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern void cvePaniniPortraitWarperRelease(ref IntPtr warper);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern IntPtr cveMercatorWarperCreate(float scale, ref IntPtr creator, ref IntPtr rotationWarper);
internal static extern IntPtr cveMercatorWarperCreate(ref IntPtr warperCreator);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern void cveMercatorWarperRelease(ref IntPtr warper);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern IntPtr cveTransverseMercatorWarperCreate(float scale, ref IntPtr creator, ref IntPtr rotationWarper);
internal static extern IntPtr cveTransverseMercatorWarperCreate(ref IntPtr warperCreator);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern void cveTransverseMercatorWarperRelease(ref IntPtr warper);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern void cveRotationWarperBuildMaps(IntPtr warper, ref Size srcSize, IntPtr K, IntPtr R, IntPtr xmap, IntPtr ymap, ref Rectangle boundingBox);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern void cveRotationWarperWarp(IntPtr warper, IntPtr src, IntPtr K, IntPtr R, CvEnum.Inter interpMode, CvEnum.BorderType borderMode, IntPtr dst, ref Point corner);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern IntPtr cvePlaneWarperGpuCreate(float scale, ref IntPtr creator, ref IntPtr rotationWarper);
internal static extern IntPtr cvePlaneWarperGpuCreate(ref IntPtr warperCreator);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern void cvePlaneWarperGpuRelease(ref IntPtr warper);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern IntPtr cveCylindricalWarperGpuCreate(float scale, ref IntPtr creator, ref IntPtr rotationWarper);
internal static extern IntPtr cveCylindricalWarperGpuCreate(ref IntPtr warperCreator);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern void cveCylindricalWarperGpuRelease(ref IntPtr warper);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern IntPtr cveSphericalWarperGpuCreate(float scale, ref IntPtr creator, ref IntPtr rotationWarper);
internal static extern IntPtr cveSphericalWarperGpuCreate(ref IntPtr warperCreator);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern void cveSphericalWarperGpuRelease(ref IntPtr warper);

11
Solution/Windows.Desktop/Emgu.CV.Test.Netcore.sln

@ -28,9 +28,20 @@ Global
GlobalSection(SharedMSBuildProjectFiles) = preSolution
..\..\Emgu.CV.Contrib\Emgu.CV.Contrib.projitems*{11e54a7e-778d-466c-a176-71e150976ac1}*SharedItemsImports = 13
..\..\Emgu.CV\Emgu.CV.projitems*{12d024ee-d0a5-4bbc-b7c0-7b18cf1ab262}*SharedItemsImports = 13
..\..\Emgu.CV.Runtime\Raspbian\Emgu.CV.Runtime.Raspbian.projitems*{47cf52b9-ab6d-4bf6-a791-1ac4d2ccd140}*SharedItemsImports = 13
..\..\Emgu.CV.Contrib\Emgu.CV.Contrib.projitems*{739ad468-29f3-48f6-8547-b1d8274d4c5a}*SharedItemsImports = 5
..\..\Emgu.CV.Cuda\Emgu.CV.Cuda.projitems*{739ad468-29f3-48f6-8547-b1d8274d4c5a}*SharedItemsImports = 5
..\..\Emgu.CV.OCR\Emgu.CV.OCR.projitems*{739ad468-29f3-48f6-8547-b1d8274d4c5a}*SharedItemsImports = 5
..\..\Emgu.CV\Emgu.CV.projitems*{739ad468-29f3-48f6-8547-b1d8274d4c5a}*SharedItemsImports = 5
..\..\Emgu.Util\Emgu.Util.projitems*{739ad468-29f3-48f6-8547-b1d8274d4c5a}*SharedItemsImports = 5
..\..\Emgu.CV.Runtime\Mac\Emgu.CV.Runtime.Mac.projitems*{74db1213-249e-44dc-b193-bc5cec981d3c}*SharedItemsImports = 13
..\..\Emgu.CV.Cuda\Emgu.CV.Cuda.projitems*{7b22bb32-c867-45a7-ac53-5bda820db91c}*SharedItemsImports = 13
..\..\Emgu.CV.OCR\Emgu.CV.OCR.projitems*{7bc723cb-1678-415f-a65f-4027f8758a6f}*SharedItemsImports = 13
..\..\Emgu.CV.Runtime\Ubuntu\Emgu.CV.Runtime.Ubuntu.projitems*{86a21342-2da9-4841-b1bd-b323ac5b81fd}*SharedItemsImports = 13
..\..\Emgu.CV.Runtime\Mac\Emgu.CV.Runtime.Mac.projitems*{98073c87-70af-4485-8c64-8c499d28c03b}*SharedItemsImports = 5
..\..\Emgu.CV.Runtime\Raspbian\Emgu.CV.Runtime.Raspbian.projitems*{98073c87-70af-4485-8c64-8c499d28c03b}*SharedItemsImports = 5
..\..\Emgu.CV.Runtime\Ubuntu\Emgu.CV.Runtime.Ubuntu.projitems*{98073c87-70af-4485-8c64-8c499d28c03b}*SharedItemsImports = 5
..\..\Emgu.CV.Runtime\Windows\Emgu.CV.Runtime.Windows.projitems*{98073c87-70af-4485-8c64-8c499d28c03b}*SharedItemsImports = 5
..\..\Emgu.Util\Emgu.Util.projitems*{98561642-5ec3-4244-baf9-6876d9ba5527}*SharedItemsImports = 13
..\..\Emgu.CV.Runtime\Windows\Emgu.CV.Runtime.Windows.projitems*{adc3c8e5-ebcd-4d3c-b3a4-20cfe0e42fc1}*SharedItemsImports = 13
EndGlobalSection

Loading…
Cancel
Save