mirror of https://github.com/emgucv/emgucv.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
108 lines
3.9 KiB
108 lines
3.9 KiB
//----------------------------------------------------------------------------
|
|
//
|
|
// Copyright (C) 2004-2019 by EMGU Corporation. All rights reserved.
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#include "optflow_c.h"
|
|
#include <memory>
|
|
|
|
void cveUpdateMotionHistory(cv::_InputArray* silhouette, cv::_InputOutputArray* mhi, double timestamp, double duration)
|
|
{
|
|
cv::motempl::updateMotionHistory(*silhouette, *mhi, timestamp, duration);
|
|
}
|
|
void cveCalcMotionGradient(cv::_InputArray* mhi, cv::_OutputArray* mask, cv::_OutputArray* orientation, double delta1, double delta2, int apertureSize)
|
|
{
|
|
cv::motempl::calcMotionGradient(*mhi, *mask, *orientation, delta1, delta2, apertureSize);
|
|
}
|
|
void cveCalcGlobalOrientation(cv::_InputArray* orientation, cv::_InputArray* mask, cv::_InputArray* mhi, double timestamp, double duration)
|
|
{
|
|
cv::motempl::calcGlobalOrientation(*orientation, *mask, *mhi, timestamp, duration);
|
|
}
|
|
void cveSegmentMotion(cv::_InputArray* mhi, cv::_OutputArray* segmask, std::vector< cv::Rect >* boundingRects, double timestamp, double segThresh)
|
|
{
|
|
cv::motempl::segmentMotion(*mhi, *segmask, *boundingRects, timestamp, segThresh);
|
|
}
|
|
|
|
cv::DenseOpticalFlow* cveOptFlowDeepFlowCreate(cv::Algorithm** algorithm, cv::Ptr<cv::DenseOpticalFlow>** sharedPtr)
|
|
{
|
|
cv::Ptr<cv::DenseOpticalFlow> ptr = cv::optflow::createOptFlow_DeepFlow();
|
|
*sharedPtr = new cv::Ptr<cv::DenseOpticalFlow>(ptr);
|
|
*algorithm = dynamic_cast<cv::Algorithm*>(ptr.get());
|
|
return ptr.get();
|
|
}
|
|
|
|
|
|
cv::DenseOpticalFlow* cveOptFlowPCAFlowCreate(cv::Algorithm** algorithm, cv::Ptr<cv::DenseOpticalFlow>** sharedPtr)
|
|
{
|
|
cv::Ptr<cv::DenseOpticalFlow> ptr = cv::optflow::createOptFlow_PCAFlow();
|
|
*sharedPtr = new cv::Ptr<cv::DenseOpticalFlow>(ptr);
|
|
*algorithm = dynamic_cast<cv::Algorithm*>(ptr.get());
|
|
return ptr.get();
|
|
}
|
|
|
|
|
|
cv::optflow::DualTVL1OpticalFlow* cveDenseOpticalFlowCreateDualTVL1(cv::DenseOpticalFlow** denseOpticalFlow, cv::Algorithm** algorithm, cv::Ptr<cv::optflow::DualTVL1OpticalFlow>** sharedPtr)
|
|
{
|
|
cv::Ptr<cv::optflow::DualTVL1OpticalFlow> dof = cv::optflow::createOptFlow_DualTVL1();
|
|
*sharedPtr = new cv::Ptr<cv::optflow::DualTVL1OpticalFlow>(dof);
|
|
cv::optflow::DualTVL1OpticalFlow* ptr = dof.get();
|
|
*denseOpticalFlow = dynamic_cast<cv::DenseOpticalFlow*>(ptr);
|
|
*algorithm = dynamic_cast<cv::Algorithm*>(ptr);
|
|
return ptr;
|
|
}
|
|
void cveDualTVL1OpticalFlowRelease(cv::Ptr<cv::optflow::DualTVL1OpticalFlow>** sharedPtr)
|
|
{
|
|
delete *sharedPtr;
|
|
*sharedPtr = 0;
|
|
}
|
|
|
|
cv::optflow::RLOFOpticalFlowParameter* cveRLOFOpticalFlowParameterCreate()
|
|
{
|
|
return new cv::optflow::RLOFOpticalFlowParameter();
|
|
}
|
|
void cveRLOFOpticalFlowParameterRelease(cv::optflow::RLOFOpticalFlowParameter** p)
|
|
{
|
|
delete *p;
|
|
*p = 0;
|
|
}
|
|
|
|
cv::optflow::DenseRLOFOpticalFlow* cveDenseRLOFOpticalFlowCreate(
|
|
cv::optflow::RLOFOpticalFlowParameter* rlofParameter,
|
|
float forwardBackwardThreshold,
|
|
CvSize* gridStep,
|
|
int interpType,
|
|
int epicK,
|
|
float epicSigma,
|
|
float epicLambda,
|
|
bool usePostProc,
|
|
float fgsLambda,
|
|
float fgsSigma,
|
|
cv::DenseOpticalFlow** denseOpticalFlow,
|
|
cv::Algorithm** algorithm,
|
|
cv::Ptr<cv::optflow::DenseRLOFOpticalFlow>** sharedPtr)
|
|
{
|
|
cv::Ptr<cv::optflow::RLOFOpticalFlowParameter> pPtr(rlofParameter, [](cv::optflow::RLOFOpticalFlowParameter* p) {});
|
|
cv::Ptr<cv::optflow::DenseRLOFOpticalFlow> rlof = cv::optflow::DenseRLOFOpticalFlow::create(
|
|
pPtr,
|
|
forwardBackwardThreshold,
|
|
*gridStep,
|
|
static_cast<cv::optflow::InterpolationType>(interpType),
|
|
epicK,
|
|
epicSigma,
|
|
epicLambda,
|
|
usePostProc,
|
|
fgsLambda,
|
|
fgsSigma);
|
|
*sharedPtr = new cv::Ptr<cv::optflow::DenseRLOFOpticalFlow>(rlof);
|
|
cv::optflow::DenseRLOFOpticalFlow* ptr = (*sharedPtr)->get();
|
|
*denseOpticalFlow = dynamic_cast<cv::optflow::DenseRLOFOpticalFlow*>(ptr);
|
|
*algorithm = dynamic_cast<cv::Algorithm*>(ptr);
|
|
return ptr;
|
|
|
|
}
|
|
void cveDenseRLOFOpticalFlowRelease(cv::Ptr<cv::optflow::DenseRLOFOpticalFlow>** sharedPtr)
|
|
{
|
|
delete *sharedPtr;
|
|
*sharedPtr = 0;
|
|
}
|