Robert Kirchhoff
Robert Kirchhoff

Reputation: 517

Using EM in opencv 2.4.2

I'm asking for help. I cannot build my project because of EM class. I use opencv 2.4.2

I cannot find where the problem is. Could someone advice?

cv::TermCriteria Termination;
Termination.type=CV_TERMCRIT_ITER;
Termination.maxCount=num_numIter;
cv::EM model=cv::EM(NClusters,cv::EM::COV_MAT_SPHERICAL,Termination);
model.train(groupped_one_person_features);

At last line a get LINK ERR, I don't know how to create object of class EM. NClusters is int, what else can be wrong?

I have used: #include "opencv2/ml/ml.hpp"

This code results in these errors:

2 error LNK2019: unresolved external symbol "public: virtual bool __cdecl cv::EM::train(class cv::_InputArray const &,class cv::_OutputArray const &,class cv::_OutputArray const &,class cv::_OutputArray const &)" (?train@EM@cv@@UEAA_NAEBV_InputArray@2@AEBV_OutputArray@2@11@Z) referenced in function "void __cdecl compute_LBPH_patterns_EM(struct ArrayData *,struct Pattern *,int,int)" (?compute_LBPH_patterns_EM@@YAXPEAUArrayData@@PEAUPattern@@HH@Z) D:\Work\EBIS2012CPlusPlus\Imet_v1.0_x64\Imet_v1.0_x64\compute_patterns.obj AND Error 1 error LNK2019: unresolved external symbol "public: virtual __cdecl cv::EM::~EM(void)" (??1EM@cv@@UEAA@XZ) referenced in function "void __cdecl compute_LBPH_patterns_EM(struct ArrayData *,struct Pattern *,int,int)" (?compute_LBPH_patterns_EM@@YAXPEAUArrayData@@PEAUPattern@@HH@Z) D:\Work\EBIS2012CPlusPlus\Imet_v1.0_x64\Imet_v1.0_x64\compute_patterns.obj AND Error 3 error LNK2019: unresolved external symbol "public: __cdecl cv::EM::EM(int,int,class cv::TermCriteria const &)" (??0EM@cv@@QEAA@HHAEBVTermCriteria@1@@Z) referenced in function "void __cdecl compute_LBPH_patterns_EM(struct ArrayData *,struct Pattern *,int,int)" (?compute_LBPH_patterns_EM@@YAXPEAUArrayData@@PEAUPattern@@HH@Z) D:\Work\EBIS2012CPlusPlus\Imet_v1.0_x64\Imet_v1.0_x64\compute_patterns.obj

Thanks a lot

Upvotes: 0

Views: 1108

Answers (2)

nikk
nikk

Reputation: 2877

Here you go

#include <opencv2\opencv.hpp>

using namespace cv;             //use the opencv namespace

EM em_model;                    //EM model

int main()
{
    //get samples
    Mat samples;

    //define and crate ternmination critaria
    int type     = TermCriteria::COUNT + TermCriteria::EPS;     
    int maxCount = EM::DEFAULT_MAX_ITERS;
    TermCriteria termCritaria = TermCriteria(type, maxCount, FLT_EPSILON);

    //define EM parameters and instantiate model
    int nclusters      =  EM::DEFAULT_NCLUSTERS;
    int covMatrix_type =  EM::COV_MAT_DEFAULT;
    em_model = EM(nclusters, covMatrix_type, termCritaria);

    //train EM model
    em_model.train(samples);


    return 0;
}

Upvotes: 0

Pranjal Sahu
Pranjal Sahu

Reputation: 1469

try using this-

using namespace cv;
EM em_model;
const TermCriteria term_crit = TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 
                                                           100, FLT_EPSILON);
em_model = EM(clustercount, EM::COV_MAT_DIAGONAL, term_crit);
em_model.train(samples, loghood, labels, probs);

Upvotes: 1

Related Questions