Browse Source

Set the _ptr value to zero after the releaseXXX function call

git-svn-id: https://emgucv.svn.sourceforge.net/svnroot/emgucv/trunk@1528 d7f09016-e345-0410-b530-edf29a71df78
UWP10
canming 14 years ago
parent
commit
45bcc1b684
  1. 1
      Emgu.CV.Extern/gpu/gpuCascadeClassifier.cpp
  2. 33
      Emgu.CV.Extern/ml.cpp
  3. 41
      Emgu.CV.Extern/ml_c.h
  4. 2
      Emgu.CV.ML/ANN_MLP.cs
  5. 2
      Emgu.CV.ML/Boost.cs
  6. 2
      Emgu.CV.ML/DTree.cs
  7. 2
      Emgu.CV.ML/EM.cs
  8. 2
      Emgu.CV.ML/ERTrees.cs
  9. 2
      Emgu.CV.ML/KNearest.cs
  10. 2
      Emgu.CV.ML/NormalBayesClassifier.cs
  11. 2
      Emgu.CV.ML/PInvoke/CvType/MCvDTreeParams.cs
  12. 2
      Emgu.CV.ML/PInvoke/CvType/MCvRTParams.cs
  13. 2
      Emgu.CV.ML/RTrees.cs
  14. 2
      Emgu.CV.ML/SVM.cs

1
Emgu.CV.Extern/gpu/gpuCascadeClassifier.cpp

@ -14,6 +14,7 @@ cv::gpu::CascadeClassifier_GPU* gpuCascadeClassifierCreate(const char* filename)
void gpuCascadeClassifierRelease(cv::gpu::CascadeClassifier_GPU** classifier)
{
delete *classifier;
*classifier = 0;
}
int gpuCascadeClassifierDetectMultiScale(cv::gpu::CascadeClassifier_GPU* classifier, const cv::gpu::GpuMat* image, cv::gpu::GpuMat* objectsBuf, double scaleFactor, int minNeighbors, CvSize minSize, CvSeq* results)

33
Emgu.CV.Extern/ml.cpp

@ -15,7 +15,7 @@ void StatModelClear(CvStatModel* model) { model->clear(); }
CvNormalBayesClassifier* CvNormalBayesClassifierDefaultCreate() { return new CvNormalBayesClassifier; }
CvNormalBayesClassifier* CvNormalBayesClassifierCreate( CvMat* _train_data, CvMat* _responses, CvMat* _var_idx, CvMat* _sample_idx )
{ return new CvNormalBayesClassifier(_train_data, _responses, _var_idx, _sample_idx); }
void CvNormalBayesClassifierRelease(CvNormalBayesClassifier* classifier) { delete classifier; }
void CvNormalBayesClassifierRelease(CvNormalBayesClassifier** classifier) { delete *classifier; *classifier = 0; }
bool CvNormalBayesClassifierTrain(CvNormalBayesClassifier* classifier, CvMat* _train_data, CvMat* _responses,
CvMat* _var_idx, CvMat* _sample_idx, bool update )
{ return classifier->train(_train_data, _responses, _var_idx, _sample_idx, update); }
@ -24,7 +24,7 @@ float CvNormalBayesClassifierPredict(CvNormalBayesClassifier* classifier, CvMat*
//KNearest
CvKNearest* CvKNearestDefaultCreate() { return new CvKNearest; }
void CvKNearestRelease(CvKNearest* classifier) { delete classifier; }
void CvKNearestRelease(CvKNearest** classifier) { delete *classifier; *classifier = 0; }
bool CvKNearestTrain(CvKNearest* classifier, CvMat* _train_data, CvMat* _responses,
CvMat* _sample_idx, bool is_regression,
int _max_k, bool _update_base)
@ -38,7 +38,7 @@ float CvKNearestFindNearest(CvKNearest* classifier, CvMat* _samples, int k, CvMa
//EM
CvEM* CvEMDefaultCreate() { return new CvEM; }
void CvEMRelease(CvEM* model) { delete model; }
void CvEMRelease(CvEM** model) { delete *model; *model = 0;}
bool CvEMTrain(CvEM* model, CvMat* samples, CvMat* sample_idx,
CvEMParams params, CvMat* labels )
{ return model->train(samples, sample_idx, params, labels); }
@ -73,7 +73,7 @@ grid->max_val = defaultGrid.max_val;
grid->min_val = defaultGrid.min_val;
grid->step = defaultGrid.step;
}
void CvSVMRelease(CvSVM* model) { delete model; }
void CvSVMRelease(CvSVM** model) { delete *model; *model = 0; }
float CvSVMPredict(CvSVM* model, CvMat* _sample )
{ return model->predict(_sample); }
float* CvSVMGetSupportVector(CvSVM* model, int i)
@ -89,7 +89,7 @@ CvANN_MLP* CvANN_MLPCreate(CvMat* _layer_sizes,
int _activ_func,
double _f_param1, double _f_param2 )
{ return new CvANN_MLP(_layer_sizes, _activ_func, _f_param1, _f_param2); }
void CvANN_MLPRelease(CvANN_MLP* model) { delete model; }
void CvANN_MLPRelease(CvANN_MLP** model) { delete *model; *model = 0; }
int CvANN_MLPTrain(CvANN_MLP* model, CvMat* _inputs, CvMat* _outputs,
CvMat* _sample_weights, CvMat* _sample_idx,
CvANN_MLP_TrainParams* _params,
@ -102,10 +102,10 @@ int CvANN_MLPGetLayerCount(CvANN_MLP* model) { return model->get_layer_count();
//Decision Tree
CvDTreeParams* CvDTreeParamsCreate() { return new CvDTreeParams; }
void CvDTreeParamsRelease(CvDTreeParams* params) { delete params; }
void CvDTreeParamsRelease(CvDTreeParams** params) { delete *params; *params = 0;}
CvDTree* CvDTreeCreate() { return new CvDTree; }
void CvDTreeRelease(CvDTree* model) { delete model; }
void CvDTreeRelease(CvDTree** model) { delete *model; *model = 0;}
bool CvDTreeTrain(CvDTree* model, CvMat* _train_data, int _tflag,
CvMat* _responses, CvMat* _var_idx,
CvMat* _sample_idx, CvMat* _var_type,
@ -117,10 +117,10 @@ CvDTreeNode* CvDTreePredict(CvDTree* model, CvMat* _sample, CvMat* _missing_data
//Random Tree
CvRTParams* CvRTParamsCreate() { return new CvRTParams(); }
void CvRTParamsRelease(CvRTParams* params) { delete params; }
void CvRTParamsRelease(CvRTParams** params) { delete *params; *params = 0; }
CvRTrees* CvRTreesCreate() { return new CvRTrees(); }
void CvRTreesRelease(CvRTrees* model) { delete model; }
void CvRTreesRelease(CvRTrees** model) { delete *model; *model = 0; }
bool CvRTreesTrain( CvRTrees* model, CvMat* _train_data, int _tflag,
CvMat* _responses, CvMat* _var_idx,
CvMat* _sample_idx, CvMat* _var_type,
@ -142,11 +142,11 @@ CvMat* CvRTreesGetVarImportance(CvRTrees* model) { return (CvMat*) model->get_va
//Extreme Random Tree
CvERTrees* CvERTreesCreate() { return new CvERTrees(); }
void CvERTreesRelease(CvERTrees* model) { delete model; }
void CvERTreesRelease(CvERTrees** model) { delete *model; *model = 0; }
//CvBoost
CvBoostParams* CvBoostParamsCreate() { return new CvBoostParams(); }
void CvBoostParamsRelease(CvBoostParams* params) { delete params; }
void CvBoostParamsRelease(CvBoostParams** params) { delete *params; *params = 0; }
CvBoost* CvBoostCreate() { return new CvBoost(); }
void CvBoostRelease(CvBoost* model) { delete model; }
@ -164,3 +164,14 @@ float CvBoostPredict(CvBoost* model, CvMat* _sample, CvMat* _missing,
bool raw_mode)
{ return model->predict(_sample, _missing, weak_responses, slice, raw_mode); }
/*
//CvGBTrees
CVAPI(CvGBTrees*) CvGBTreesCreate();
CVAPI(void) CvGBTreesRelease(CvGBTrees** model);
CVAPI(bool) CvGBTreeTrain(CvGBTrees* model, const CvMat* trainData, int tflag,
const CvMat* responses, const CvMat* varIdx,
const CvMat* sampleIdx, const CvMat* varType,
const CvMat* missingDataMask,
CvGBTreesParams params,
bool update);
*/

41
Emgu.CV.Extern/ml_c.h

@ -12,20 +12,20 @@
#include "opencv2/ml/ml.hpp"
//StatModel
CVAPI(void) StatModelSave(CvStatModel* model, char* filename, char* name = 0);
CVAPI(void) StatModelLoad(CvStatModel* model, char* filename, char* name = 0);
CVAPI(void) StatModelSave(CvStatModel* model, char* filename, char* name);
CVAPI(void) StatModelLoad(CvStatModel* model, char* filename, char* name);
CVAPI(void) StatModelClear(CvStatModel* model);
//CvNormalBayesClassifier
CVAPI(CvNormalBayesClassifier*) CvNormalBayesClassifierDefaultCreate();
CVAPI(CvNormalBayesClassifier*) CvNormalBayesClassifierCreate( CvMat* _train_data, CvMat* _responses, CvMat* _var_idx, CvMat* _sample_idx );
CVAPI(void) CvNormalBayesClassifierRelease(CvNormalBayesClassifier* classifier);
CVAPI(void) CvNormalBayesClassifierRelease(CvNormalBayesClassifier** classifier);
CVAPI(bool) CvNormalBayesClassifierTrain(CvNormalBayesClassifier* classifier, CvMat* _train_data, CvMat* _responses,
CvMat* _var_idx, CvMat* _sample_idx, bool update );
CVAPI(float) CvNormalBayesClassifierPredict(CvNormalBayesClassifier* classifier, CvMat* _samples, CvMat* results );
//KNearest
CVAPI(CvKNearest*) CvKNearestDefaultCreate();
CVAPI(void) CvKNearestRelease(CvKNearest* classifier);
CVAPI(void) CvKNearestRelease(CvKNearest** classifier);
CVAPI(bool) CvKNearestTrain(CvKNearest* classifier, CvMat* _train_data, CvMat* _responses,
CvMat* _sample_idx, bool is_regression,
int _max_k, bool _update_base);
@ -36,7 +36,7 @@ CVAPI(float) CvKNearestFindNearest(CvKNearest* classifier, CvMat* _samples, int
//EM
CVAPI(CvEM*) CvEMDefaultCreate();
CVAPI(void) CvEMRelease(CvEM* model);
CVAPI(void) CvEMRelease(CvEM** model);
CVAPI(bool) CvEMTrain(CvEM* model, CvMat* samples, CvMat* sample_idx,
CvEMParams params, CvMat* labels );
CVAPI(float) CvEMPredict(CvEM* model, CvMat* sample, CvMat* probs );
@ -61,7 +61,7 @@ CVAPI(bool) CvSVMTrainAuto(CvSVM* model, CvMat* _train_data, CvMat* _responses,
CvParamGrid coef_grid,
CvParamGrid degree_grid);
CVAPI(void) CvSVMGetDefaultGrid(int gridType, CvParamGrid* grid);
CVAPI(void) CvSVMRelease(CvSVM* model);
CVAPI(void) CvSVMRelease(CvSVM** model);
CVAPI(float) CvSVMPredict(CvSVM* model, CvMat* _sample );
CVAPI(float*) CvSVMGetSupportVector(CvSVM* model, int i);
CVAPI(int) CvSVMGetSupportVectorCount(CvSVM* model);
@ -72,7 +72,7 @@ CVAPI(void) CvSVMGetParameters(CvSVM* model, CvSVMParams* param);
CVAPI(CvANN_MLP*) CvANN_MLPCreate(CvMat* _layer_sizes,
int _activ_func,
double _f_param1, double _f_param2 );
CVAPI(void) CvANN_MLPRelease(CvANN_MLP* model);
CVAPI(void) CvANN_MLPRelease(CvANN_MLP** model);
CVAPI(int) CvANN_MLPTrain(CvANN_MLP* model, CvMat* _inputs, CvMat* _outputs,
CvMat* _sample_weights, CvMat* _sample_idx,
CvANN_MLP_TrainParams* _params,
@ -83,9 +83,9 @@ CVAPI(int) CvANN_MLPGetLayerCount(CvANN_MLP* model);
//Decision Tree
CVAPI(CvDTreeParams*) CvDTreeParamsCreate();
CVAPI(void) CvDTreeParamsRelease(CvDTreeParams* params);
CVAPI(void) CvDTreeParamsRelease(CvDTreeParams** params);
CVAPI(CvDTree*) CvDTreeCreate();
CVAPI(void) CvDTreeRelease(CvDTree* model);
CVAPI(void) CvDTreeRelease(CvDTree** model);
CVAPI(bool) CvDTreeTrain(CvDTree* model, CvMat* _train_data, int _tflag,
CvMat* _responses, CvMat* _var_idx,
CvMat* _sample_idx, CvMat* _var_type,
@ -95,10 +95,10 @@ CVAPI(CvDTreeNode*) CvDTreePredict(CvDTree* model, CvMat* _sample, CvMat* _missi
//Random Tree
CVAPI(CvRTParams*) CvRTParamsCreate();
CVAPI(void) CvRTParamsRelease(CvRTParams* params);
CVAPI(void) CvRTParamsRelease(CvRTParams** params);
CVAPI(CvRTrees*) CvRTreesCreate();
CVAPI(void) CvRTreesRelease(CvRTrees* model);
CVAPI(void) CvRTreesRelease(CvRTrees** model);
CVAPI(bool) CvRTreesTrain( CvRTrees* model, CvMat* _train_data, int _tflag,
CvMat* _responses, CvMat* _var_idx,
CvMat* _sample_idx, CvMat* _var_type,
@ -118,11 +118,11 @@ CVAPI(CvMat*) CvRTreesGetVarImportance(CvRTrees* model);
//Extreme Random Tree
CVAPI(CvERTrees*) CvERTreesCreate();
CVAPI(void) CvERTreesRelease(CvERTrees* model);
CVAPI(void) CvERTreesRelease(CvERTrees** model);
//CvBoost
CVAPI(CvBoostParams*) CvBoostParamsCreate();
CVAPI(void) CvBoostParamsRelease(CvBoostParams* params);
CVAPI(void) CvBoostParamsRelease(CvBoostParams** params);
CVAPI(CvBoost*) CvBoostCreate();
CVAPI(void) CvBoostRelease(CvBoost* model);
@ -133,8 +133,17 @@ CVAPI(bool) CvBoostTrain(CvBoost* model, CvMat* _train_data, int _tflag,
CvBoostParams params,
bool update );
CVAPI(float) CvBoostPredict(CvBoost* model, CvMat* _sample, CvMat* _missing=0,
CvMat* weak_responses=0, CvSlice slice=CV_WHOLE_SEQ,
bool raw_mode=false );
CVAPI(float) CvBoostPredict(CvBoost* model, CvMat* _sample, CvMat* _missing,
CvMat* weak_responses, CvSlice slice,
bool raw_mode);
//CvGBTrees
CVAPI(CvGBTrees*) CvGBTreesCreate();
CVAPI(void) CvGBTreesRelease(CvGBTrees** model);
CVAPI(bool) CvGBTreeTrain(CvGBTrees* model, const CvMat* trainData, int tflag,
const CvMat* responses, const CvMat* varIdx,
const CvMat* sampleIdx, const CvMat* varType,
const CvMat* missingDataMask,
CvGBTreesParams params,
bool update);
#endif

2
Emgu.CV.ML/ANN_MLP.cs

@ -29,7 +29,7 @@ namespace Emgu.CV.ML
/// </summary>
protected override void DisposeObject()
{
MlInvoke.CvANN_MLPRelease(_ptr);
MlInvoke.CvANN_MLPRelease(ref _ptr);
}
/// <summary>

2
Emgu.CV.ML/Boost.cs

@ -91,7 +91,7 @@ namespace Emgu.CV.ML
/// </summary>
protected override void DisposeObject()
{
MlInvoke.CvBoostRelease(_ptr);
MlInvoke.CvBoostRelease(ref _ptr);
}
}
}

2
Emgu.CV.ML/DTree.cs

@ -77,7 +77,7 @@ namespace Emgu.CV.ML
/// </summary>
protected override void DisposeObject()
{
MlInvoke.CvDTreeRelease(_ptr);
MlInvoke.CvDTreeRelease(ref _ptr);
}
}
}

2
Emgu.CV.ML/EM.cs

@ -168,7 +168,7 @@ namespace Emgu.CV.ML
/// </summary>
protected override void DisposeObject()
{
MlInvoke.CvEMRelease(_ptr);
MlInvoke.CvEMRelease(ref _ptr);
}
}
}

2
Emgu.CV.ML/ERTrees.cs

@ -24,7 +24,7 @@ namespace Emgu.CV.ML
/// </summary>
protected override void DisposeObject()
{
MlInvoke.CvERTreesRelease(_ptr);
MlInvoke.CvERTreesRelease(ref _ptr);
}
}
}

2
Emgu.CV.ML/KNearest.cs

@ -39,7 +39,7 @@ namespace Emgu.CV.ML
/// </summary>
protected override void DisposeObject()
{
MlInvoke.CvKNearestRelease(_ptr);
MlInvoke.CvKNearestRelease(ref _ptr);
}
/// <summary>

2
Emgu.CV.ML/NormalBayesClassifier.cs

@ -41,7 +41,7 @@ namespace Emgu.CV.ML
/// </summary>
protected override void DisposeObject()
{
MlInvoke.CvNormalBayesClassifierRelease(_ptr);
MlInvoke.CvNormalBayesClassifierRelease(ref _ptr);
}
/// <summary>

2
Emgu.CV.ML/PInvoke/CvType/MCvDTreeParams.cs

@ -21,7 +21,7 @@ namespace Emgu.CV.ML.Structure
{
IntPtr ptr = MlInvoke.CvDTreeParamsCreate();
MCvDTreeParams p = (MCvDTreeParams) Marshal.PtrToStructure(ptr, typeof(MCvDTreeParams));
MlInvoke.CvDTreeParamsRelease(ptr);
MlInvoke.CvDTreeParamsRelease(ref ptr);
return p;
}

2
Emgu.CV.ML/PInvoke/CvType/MCvRTParams.cs

@ -22,7 +22,7 @@ namespace Emgu.CV.ML.Structure
{
IntPtr ptr = MlInvoke.CvRTParamsCreate();
MCvRTParams p = (MCvRTParams)Marshal.PtrToStructure(ptr, typeof(MCvRTParams));
MlInvoke.CvRTParamsRelease(ptr);
MlInvoke.CvRTParamsRelease(ref ptr);
return p;
}

2
Emgu.CV.ML/RTrees.cs

@ -29,7 +29,7 @@ namespace Emgu.CV.ML
/// </summary>
protected override void DisposeObject()
{
MlInvoke.CvRTreesRelease(_ptr);
MlInvoke.CvRTreesRelease(ref _ptr);
}
/// <summary>

2
Emgu.CV.ML/SVM.cs

@ -26,7 +26,7 @@ namespace Emgu.CV.ML
/// </summary>
protected override void DisposeObject()
{
MlInvoke.CvSVMRelease(_ptr);
MlInvoke.CvSVMRelease(ref _ptr);
}
/// <summary>

Loading…
Cancel
Save