Comment puis-je obtenir la taille d'un cv :: Mat? (Mat ou MatND)
Je suis entrain de créer un multi-dimensionnelle MAT objet, et voudrais obtenir la taille de l'objet - par exemple,
const int sz[] = {10,10,9};
Mat temp(3,sz,CV_64F);
std::cout << "temp.dims = " << temp.dims << " temp.size = " << temp.size() << " temp.channels = " << temp.channels() << std::endl;
Je crois que le résultant MAT pour être 10x10x9, et je tiens à confirmer, mais le COUT déclaration donne:
temp.dims = 3 temp.size = [10 x 10] temp.canaux = 1
J'espérais voir:
temp.dims = 3 temp.size = [10 x 10 x 9] temp.canaux = 1
Ou:
temp.dims = 3 temp.size = [10 x 10] temp.canaux = 9
Comment puis-je obtenir la dimension de ce Tapis objet? Je n'ai pas vu toutes les méthodes de la Mat::Mat ou MatND
source d'informationauteur Pete | 2013-09-18
Vous devez vous connecter pour publier un commentaire.
Vous venez de trouver vous-même l'un des nombreux défauts de la OpenCV API C++.
Si vous regardez le code source de OpenCV, version 2.4.6.1, vous vous rendrez compte
cv::Mat::size
est un objet membre de typecv::Mat::MSize
qui est définie commeAinsi
cv::Mat::size()
fait en réalité référence àcv::Mat::MSize::operator ()()
dont le type de retourSize
est défini commeCitant le OpenCV manuel
Size
est unEn d'autres termes,
Size
ne convient que pour les matrices 2D.Heureusement, tout espoir n'est pas perdu tant que vous pouvez utiliser
cv::Mat::MSize::operator [](int i)
pour obtenir la taille de la matrice le long de ses i-ème dimension.OpenCV 2.4.9 traite avec multi-dimensionnelle des tailles de l'amende juste. Le
struct
cv::Mat::MSize
peut magasins et retourner plusieurs dimensions. Le membre de donnéescv::Mat::size
est du typecv::Mat::MSize
. Ce code va énumérer les dimensions pour vous:La sortie est: