64 votes

Imprimer les valeurs d'une matrice (Mat) dans OpenCV C++

Je veux vider les valeurs d'une matrice dans OpenCV vers la console en utilisant cout. J'ai rapidement appris que je ne comprenais pas assez bien le système de types d'OpenvCV ni les modèles C++ pour accomplir cette tâche simple.

Un lecteur pourrait-il publier (ou m'indiquer) une petite fonction ou un extrait de code qui imprime un tapis ?

Salutations, Aaron

PS : le code qui utilise la nouvelle interface C++ Mat par opposition à l'ancienne interface CvMat est préférentiel.

102voto

Martin Beckett Points 60406

Voir la première réponse à Accéder à un élément de matrice dans l'objet "Mat" (pas l'objet CvMat) dans OpenCV C++ Ensuite, bouclez simplement sur tous les éléments dans cout << M.at<double>(0,0); plutôt que juste 0,0

Ou mieux encore avec l'interface C++ :

 cv::Mat M;
cout << "M = " << endl << " "  << M << endl << endl;

4voto

Dima Maligin Points 119

Je pense qu'utiliser le matrix.at<type>(x,y) n'est pas le meilleur moyen d'itérer un objet Mat ! Si je me souviens bien, matrix.at<type>(x,y) itérera depuis le début de la matrice à chaque fois que vous l'appelez (je me trompe peut-être). Je suggérerais d'utiliser cv::MatIterator_

 cv::Mat someMat(1, 4, CV_64F, &someData);;
cv::MatIterator_<double> _it = someMat.begin<double>();
for(;_it!=someMat.end<double>(); _it++){
    std::cout << *_it << std::endl;
}

3voto

Dmoonleo Points 46
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>

#include <iostream>
#include <iomanip>

using namespace cv;
using namespace std;

int main(int argc, char** argv)
{
    double data[4] = {-0.0000000077898273846583732, -0.03749374753019832, -0.0374787251930463, -0.000000000077893623846343843};
    Mat src = Mat(1, 4, CV_64F, &data);
    for(int i=0; i<4; i++)
        cout << setprecision(3) << src.at<double>(0,i) << endl;

    return 0;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X