Je viens de rencontrer un problème étrange. Dans l'en-tête de ma classe, j'ai défini plusieurs cv::Mat
comme ceci:
cv::Mat drawing, img_grad, img_bright, img_cov;
(ver1)
cv::Mat drawing, img_grad, img_bright, img_cov, img_notused;
(ver2)Définir cv :: Mat dans l'en-tête suivi par un autre Mat évite plusieurs canaux
Dans le code i Réglez ensuite img_cov comme suit:
img_cov = Mat::zeros(somemat.size(), CV_32FC(6))
Chose étrange est que si j'ajoute un autre Mat à la déclaration d'en-tête (voir ver2 ci-dessus) de mes Mats multiples que, même si img_notused
il n'est jamais utilisé, je ne suis pas en mesure d'accéder à un autre canal de img_cov
que 0. Accès par exemple via img_cov.at<float>(j, i, 1)
conduit à un accident.
Semble être une chose mermoy-allocation. Quelqu'un pourrait-il m'expliquer cela?
Merci, mais la façon dont je l'ai écrit dans mon premier post offre vraiment des résultats erronés mais pourquoi faut-il renvoyer des résultats à tout donné, je ne déclare aucun autre tapis dans l'en-tête après une accédé? Malheureusement, je n'ai pas mis le '' dans les marques de code, c'est pourquoi le site ne l'a pas affiché de cette façon. Quoi qu'il en soit, l'accès aux valeurs de votre façon fonctionne avec "Ver1" ainsi que "Ver2". Mais cela explique-t-il le comportement étrange mentionné ci-dessus? –
moatilliatta
Ma façon fonctionne avec Ver1 et Ver2 parce que c'est correct. Votre façon de travailler a travaillé par hasard. Probablement le compilateur délivre une disposition de mémoire différente selon le nombre de variables et vous êtes plus proche de la limite de la limite de la mémoire allouée, initialement. Pourtant, les valeurs retournées seront erronées dans votre Ver1 et Ver2, essayez de l'afficher. –
Ouais, ils sont vraiment totalement faux et très très petit. Étrange, quelque part je rougis à propos de la commande 'img_cov.at (j, i, 1)' mais évidemment c'était une mauvaise piste. Merci! –
moatilliatta