Browse Source

Added Emgu.CV.Stitching.CameraParams

pull/910/head
Canming Huang 2 years ago
parent
commit
92c940be24
  1. 35
      Emgu.CV.Extern/CMakeLists.txt
  2. 31
      Emgu.CV.Extern/stitching/stitching_c.cpp
  3. 4
      Emgu.CV.Extern/stitching/stitching_c.h
  4. 76
      Emgu.CV/Stitching/CameraParams.cs

35
Emgu.CV.Extern/CMakeLists.txt

@ -2226,6 +2226,41 @@ ENDIF()
""
${HAVE_opencv_stitching})
CREATE_OCV_CLASS_PROPERTY(
"stitching/camera_params_property"
"${CMAKE_CURRENT_SOURCE_DIR}/../Emgu.CV/Stitching/CameraParams.g.cs"
"cv::detail::CameraParams"
"CameraParams"
"focal;aspect;ppx;ppy;R"
"double;double;double;double;cv::Mat"
"element;element;element;element;element"
"Focal;Aspect;Ppx;Ppy;R"
"double;double;double;double;Mat"
"The focal length;
The aspect ratio;
The principal point X;
The principal point Y;
The rotation Mat"
"Emgu.CV.Stitching"
"StitchingInvoke"
"CameraParams"
""
"#include \"stitching_c.h\""
""
""
${HAVE_opencv_stitching})
CREATE_VECTOR_CS(
"CameraParams"
"cv::detail::CameraParams"
"Emgu.CV.Stitching.CameraParams"
"object_not_array"
"${CMAKE_CURRENT_SOURCE_DIR}/../Emgu.CV/Util"
Emgu.CV.Stitching
""
"#include \"stitching_c.h\""
""
"defined(HAVE_OPENCV_STITCHING)")
############################### stitching code gen END ################################
############################### video code gen START ##############################

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

@ -1341,4 +1341,33 @@ void cveSphericalWarperGpuRelease(cv::SphericalWarperGpu** warper)
#else
throw_no_stitching();
#endif
}
}
cv::detail::CameraParams* cveCameraParamsCreate()
{
#ifdef HAVE_OPENCV_STITCHING
return new cv::detail::CameraParams();
#else
throw_no_stitching();
#endif
}
void cveCameraParamsRelease(cv::detail::CameraParams** params)
{
#ifdef HAVE_OPENCV_STITCHING
delete* params;
*params = 0;
#else
throw_no_stitching();
#endif
}
void cveCameraParamsGetK(cv::detail::CameraParams* params, cv::_OutputArray* k)
{
#ifdef HAVE_OPENCV_STITCHING
cv::Mat m = params->K();
m.copyTo(*k);
#else
throw_no_stitching();
#endif
}

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

@ -341,4 +341,8 @@ CVAPI(void) cveDetailSphericalWarperGpuRelease(cv::detail::SphericalWarperGpu**
CVAPI(cv::SphericalWarperGpu*) cveSphericalWarperGpuCreate(cv::WarperCreator** warperCreator);
CVAPI(void) cveSphericalWarperGpuRelease(cv::SphericalWarperGpu** warper);
CVAPI(cv::detail::CameraParams*) cveCameraParamsCreate();
CVAPI(void) cveCameraParamsRelease(cv::detail::CameraParams** params);
CVAPI(void) cveCameraParamsGetK(cv::detail::CameraParams* params, cv::_OutputArray* k);
#endif

76
Emgu.CV/Stitching/CameraParams.cs

@ -0,0 +1,76 @@
//----------------------------------------------------------------------------
// Copyright (C) 2004-2024 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>
/// Camera parameters used for stitching.
/// </summary>
public partial class CameraParams : UnmanagedObject
{
private readonly bool _needDispose;
/// <summary>
/// Create a default camera parameters
/// </summary>
public CameraParams()
:this(StitchingInvoke.cveCameraParamsCreate(), true)
{
}
internal CameraParams(IntPtr ptr, bool needDispose)
{
_ptr = ptr;
_needDispose = needDispose;
}
/// <summary>
/// Reset the unmanaged pointer associated to this object
/// </summary>
protected override void DisposeObject()
{
if (_needDispose && _ptr != IntPtr.Zero)
StitchingInvoke.cveCameraParamsRelease(ref _ptr);
_ptr = IntPtr.Zero;
}
/// <summary>
/// Construct the camera calibration matrix using the camera parameters
/// </summary>
/// <returns>The camera calibration matrix</returns>
public Mat K()
{
Mat m = new Mat();
using (OutputArray ioM = m.GetOutputArray())
{
StitchingInvoke.cveCameraParamsGetK(_ptr, ioM);
return m;
}
}
}
public static partial class StitchingInvoke
{
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern IntPtr cveCameraParamsCreate();
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern void cveCameraParamsRelease(ref IntPtr cameraParams);
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal static extern void cveCameraParamsGetK(IntPtr cameraParams, IntPtr k);
}
}
Loading…
Cancel
Save