Browse Source

More functions added to facemask.

pull/97/head
Canming Huang 8 years ago
parent
commit
a838fffc28
  1. 50
      Emgu.CV.Contrib/Face/IFacemark.cs
  2. 17
      Emgu.CV.Extern/face/face_c.cpp
  3. 5
      Emgu.CV.Extern/face/face_c.h

50
Emgu.CV.Contrib/Face/IFacemark.cs

@ -13,7 +13,7 @@ using Emgu.Util;
namespace Emgu.CV.Face
{
public interface IFacemark
public interface IFacemark
{
/// <summary>
@ -29,7 +29,7 @@ namespace Emgu.CV
public static partial class ContribInvoke
{
public static bool SetFaceDetector(Emgu.CV.Face.IFacemark facemark, FaceDetectNative faceDetect)
public static bool SetFaceDetector(this Emgu.CV.Face.IFacemark facemark, FaceDetectNative faceDetect)
{
return cveFacemarkSetFaceDetector(facemark.FacemarkPtr, faceDetect);
}
@ -40,5 +40,51 @@ namespace Emgu.CV
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
[return: MarshalAs(CvInvoke.BoolMarshalType)]
internal extern static bool cveFacemarkSetFaceDetector(IntPtr facemark, FaceDetectNative detector);
public static void LoadModel(this Emgu.CV.Face.IFacemark facemark, String model)
{
using (CvString cs = new CvString(model))
{
cveFacemarkLoadModel(facemark.FacemarkPtr, cs);
}
}
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal extern static void cveFacemarkLoadModel(IntPtr facemark, IntPtr model);
public static bool GetFaces(this Emgu.CV.Face.IFacemark facemark, IInputArray image, IOutputArray faces)
{
using (InputArray iaImage = image.GetInputArray())
using (OutputArray oaFaces = faces.GetOutputArray())
{
return cveFacemarkGetFaces(facemark.FacemarkPtr, iaImage, oaFaces);
}
}
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
[return: MarshalAs(CvInvoke.BoolMarshalType)]
internal extern static bool cveFacemarkGetFaces(IntPtr facemark, IntPtr image, IntPtr faces);
public static bool Fit(this Emgu.CV.Face.IFacemark facemark, IInputArray image, IInputArray faces, IInputOutputArray landmarks)
{
using (InputArray iaImage = image.GetInputArray())
using (InputArray iaFaces = faces.GetInputArray())
using (InputOutputArray ioaLandmarks = landmarks.GetInputOutputArray())
{
return cveFacemarkFit(facemark.FacemarkPtr, iaImage, iaFaces, ioaLandmarks);
}
}
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
[return: MarshalAs(CvInvoke.BoolMarshalType)]
internal extern static bool cveFacemarkFit(IntPtr facemark, IntPtr image, IntPtr faces, IntPtr landmarks);
public static void DrawFacemarks(IInputOutputArray image, IInputArray points, MCvScalar color)
{
using (InputOutputArray ioaImage = image.GetInputOutputArray())
using (InputArray iaPoints = points.GetInputArray())
{
cveDrawFacemarks(ioaImage, iaPoints, ref color);
}
}
[DllImport(CvInvoke.ExternLibrary, CallingConvention = CvInvoke.CvCallingConvention)]
internal extern static void cveDrawFacemarks(IntPtr image, IntPtr points, ref MCvScalar color);
}
}

17
Emgu.CV.Extern/face/face_c.cpp

@ -109,4 +109,21 @@ bool myDetector(cv::InputArray image, cv::OutputArray faces, CSharp_FaceDetector
bool cveFacemarkSetFaceDetector(cv::face::Facemark* facemark, CSharp_FaceDetector detector)
{
return facemark->setFaceDetector((cv::face::FN_FaceDetector) myDetector, detector);
}
void cveFacemarkLoadModel(cv::face::Facemark* facemark, cv::String* model)
{
facemark->loadModel(*model);
}
bool cveFacemarkGetFaces(cv::face::Facemark* facemark, cv::_InputArray* image, cv::_OutputArray* faces)
{
facemark->getFaces(*image, *faces);
}
bool cveFacemarkFit(cv::face::Facemark* facemark, cv::_InputArray* image, cv::_InputArray* faces, cv::_InputOutputArray* landmarks)
{
facemark->fit(*image, *faces, *landmarks);
}
void cveDrawFacemarks(cv::_InputOutputArray* image, cv::_InputArray* points, CvScalar* color)
{
cv::face::drawFacemarks(*image, *points, *color);
}

5
Emgu.CV.Extern/face/face_c.h

@ -36,4 +36,9 @@ CVAPI(void) cveFacemarkLBFRelease(cv::face::FacemarkLBF** facemark);
typedef bool(*CSharp_FaceDetector)(const cv::_InputArray*, const cv::_OutputArray*);
CVAPI(bool) cveFacemarkSetFaceDetector(cv::face::Facemark* facemark, CSharp_FaceDetector detector);
CVAPI(void) cveFacemarkLoadModel(cv::face::Facemark* facemark, cv::String* model);
CVAPI(bool) cveFacemarkGetFaces(cv::face::Facemark* facemark, cv::_InputArray* image, cv::_OutputArray* faces);
CVAPI(bool) cveFacemarkFit(cv::face::Facemark* facemark, cv::_InputArray* image, cv::_InputArray* faces, cv::_InputOutputArray* landmarks);
CVAPI(void) cveDrawFacemarks(cv::_InputOutputArray* image, cv::_InputArray* points, CvScalar* color);
#endif
Loading…
Cancel
Save