2013-10-03 2 views
1

Je suis aux prises avec la mise à zéro des éléments de la matrice 3D avec opencv. Je peux zéro tous les éléments de matrice 2D comme manière suivante:Comment éliminer les éléments de 3D Matrix avec opencv Library?

meta = new Mat(Mat::zeros(cluster,3,CV_32S)); 

J'essaie d'utiliser la même façon d'initialiser des éléments avec 0 dans la matrice 3D, elle échoue.

block = new Mat(Mat::zeros(3,dim,CV_32F)); 

Message d'erreur:

1>MatrixOp.obj : error LNK2019: unresolved external symbol "public: static class cv::MatExpr __cdecl cv::Mat::zeros(int,int const *,int)" ([email protected]@[email protected]@[email protected]@[email protected]) referenced in function "public: __thiscall MatrixOp::MatrixOp(char *)" ([email protected]@[email protected]@Z) 

je me suis un dernier moyen d'initialiser la matrice. Traverser la matrice et définir la valeur de l'élément 0. Mais il semble labor-some.

for(int i=0;i<value_num;i++) 
    for(int j=0;j<frame_no;j++) 
     for(int k=0;k<cluster;k++) 
      block->at<float>(i,j,k) = 0; 

Quelqu'un peut-il me lancer de meilleures idées? Merci.

Répondre

6

Je vous rappelle la documentation, vous pouvez utiliser ce constructeur:

C++: Mat::Mat(int ndims, const int* sizes, int type, const Scalar& s) 

passant cv :: Scalar (0) devrait être bon pour vos besoins.

int sizes[] = { 100, 100, 100 }; 
cv::Mat *matrix = new cv::Mat(3, sizes, CV_32FC1, cv::Scalar(0)); 

Cela devrait faire une matrice 3D, une sorte de cube avec le bord 100.

+1

C'est assez cool. Scalar est super bon outil. Appréciez votre réponse. –

+0

Oui, ils sont vraiment gentils;) – Michele

Questions connexes