OpenCV documentation dit que “char” est “unsigned integer” type de données. Comment?
J'ai confondu avec le openCV documentation mentionnée ici.
Que par la documentation, si je crée une image avec "char", les pixels de l'image peut stocker entier non signé valeurs, mais si je créer une image en utilisant le code suivant:
Mat image;
image = imread("someImage.jpg" , 0); //Read an image in "UCHAR" form
ou en faisant
image.create(10, 10, CV_8UC1);
for(int i=0; i<image.rows; i++)
{
for(int j=o; j<image.cols; j++)
{
image.at<uchar>(i,j) = (uchar)255;
}
}
et puis si j'essaie d'imprimer les valeurs à l'aide
cout<<" "<<image.at<uchar>(i,j);
puis-je obtenir bizarre résultats au terminal, mais si j'utilise l'instruction suivante, alors je peux obtenir les valeurs entre 0 et 255.
cout<<" "<<(int)image.at<uchar>(i,j); //with TYPECAST
Question: Pourquoi dois-je faire transtypage pour obtenir d'imprimer les valeurs dans la gamme de 0 à 255 si l'image elle-même peut stocker "unsigned integer" valeurs.
Il aide à tous de savoir que
C'est un entier qui ne prend que 8 bits, vous ne traitez pas ces éléments comme des codes ascii
La droite.
désolé mais je suis incapable de comprendre vos sens en raison de mon peu de c++/opencv connaissances. ne opencv docs aussi dire que "char" signifie "unsigned char" ou pas?
char
, unsigned char
, et signed char
sont tous les types integer par la norme? Peut-être OpenCV juste utilisé vraiment pisse-pauvres vernaculaire dans cette phrase?C'est un entier qui ne prend que 8 bits, vous ne traitez pas ces éléments comme des codes ascii
La droite.
integer
n'est pas le même que 32 bit integer
. C'est tout là est à lui.désolé mais je suis incapable de comprendre vos sens en raison de mon peu de c++/opencv connaissances. ne opencv docs aussi dire que "char" signifie "unsigned char" ou pas?
OriginalL'auteur user2756695 | 2014-03-01
Vous devez vous connecter pour publier un commentaire.
Si vous essayez de trouver la définition de
uchar
(qui est d'appuyer sur F12 si vous utilisez Visual Studio), puis vous vous retrouverez dans OpenCV est core/types_c.h:de la norme de façon raisonnable et de définir unsigned intégrale 8 bits type (c'est à dire "8-bit unsigned integer") depuis la norme garantit que
char
nécessite toujours exactement 1 octet de mémoire. Cela signifie que:utilise la surcharge
operator<<
qui prendunsigned char
(char
), qui imprime valeur passée en forme de personnage, pas le nombre.Cast explicite, toutefois, les causes d'une autre version de
<<
à être utilisé:et, par conséquent, il imprime les numéros. Ce problème n'est pas lié au fait que vous êtes en utilisant OpenCV.
Exemple Simple:
sorties:
8 8 56
Et si le fait qu'il est un modèle qui vous trouble, alors ce comportement est équivalent à:
Oui, voir mon edit.
de sorte qu'il sera ok si je ne
float value = c;
oùuchar c = 255;
? Serais-je en mesure d'obtenirvalue =255.0
si j'essaie d'imprimer?Il est implicite conversion de type, ou, pour être plus précis:
uchar
va être "promu" àfloat
, donc oui, c'est ok.OriginalL'auteur LihO
Simplement, parce que, bien que
uchar
est un type entier, le flux de l'opération<<
imprime le personnage qu'il représente, pas une séquence de chiffres. En passant le typeint
vous obtenez une autre surcharge de ce même flux opération, qui n'a l'impression d'une séquence de chiffres.oui en effet, j'ai écrémé votre réponse et était sur le point de le lire pour s'assurer qu'il ne contient pas toutes les inexactitudes avant upvoting, quand j'ai pensé qu'une version raccourcie pourrait également être utile 🙂
OriginalL'auteur Steve Jessop