Comment accéder aux valeurs des pixels de CV_32F/CV_64F Mat?
J'ai travaillé sur l'homographie et à chaque fois que j'essaie de vérifier les valeurs de H la matrice (type CV_64F) à l'aide de H.at<float>(i, j)
- je obtenir des nombres aléatoires(parfois la valeur d'ordures). Je veux accéder à des valeurs de pixel de float matrice. Est-il possible de le faire?
Mat A = Mat::eye(3, 3, CV_64F);
float B;
for(int i=0; i<A.rows; i++)
{
for(int j=0; j<A.cols; j++)
{
printf("%f\n", A.at<float>(i, j));
}
}
imshow("identity", A);
waitKey(0);
Cette montre correcte de l'image d'une matrice d'identité, mais tout en essayant d'accéder à des valeurs de pixel, je reçois
0.000000
1.875000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
Pourquoi est-ce donc?
OriginalL'auteur Froyo | 2013-02-28
Vous devez vous connecter pour publier un commentaire.
Vous devriez essayer ceci:
parce que votre matrice est de "type"
CV_64F
qui à son tour signifie qu'il contient des éléments de typedouble
, pasfloat
.En passant, je ne suis pas sûr de savoir si vous êtes au courant de cela, mais vous pouvez utiliser
cout
pour imprimer la matrice comme suit:J'ai trouvé ceci pour être utile pour inspecter une petite matrice ou une tranche d'une matrice.
Peut-être que vous pouvez marquer ma réponse comme correcte. Merci.
OriginalL'auteur lightalchemist
L'exemple ci-dessous initialise une matrice de Hilbert:
Gardez à l'esprit que la taille de l'identifiant utilisé dans l'opérateur ne peut pas être choisi au hasard. Cela dépend de l'image à partir de laquelle vous essayez de récupérer les données. Le tableau ci-dessous donne un meilleur aperçu de cette:
Si la matrice est de type CV_8U ensuite utiliser
Mat.at<uchar>(y,x)
.Si la matrice est de type CV_8S ensuite utiliser
Mat.at<schar>(y,x)
.Si la matrice est de type CV_16U ensuite utiliser
Mat.at<ushort>(y,x)
.Si la matrice est de type CV_16S ensuite utiliser
Mat.at<short>(y,x)
.Si la matrice est de type CV_32S ensuite utiliser
Mat.at<int>(y,x)
.Si la matrice est de type CV_32F ensuite utiliser
Mat.at<float>(y,x)
.Si la matrice est de type CV_64F ensuite utiliser
Mat.at<double>(y,x)
.(Prises de OpenCV docs)
OriginalL'auteur shahar_m