Dans OpenCV 2.1: Comment attribuer une matrice à un submatrix d'une autre matrice?
Supposons que j'ai une matrice
A = cv::Mat(3,3,CV_32F)
et une matrice
B = cv::Mat(2,2,CV_32F).
Disons Un a tous les zéros et B a tous ceux.
Je veux attribuer les valeurs de B pour le coin supérieur gauche de A. Comment puis-je faire cela?
J'ai essayé le suivant:
A(cv::Rect_<int>(0,0,2,2)) = B
Mais cela ne semble pas fonctionner. Toutefois, l'affectation d'une valeur scalaire à la subrect de cette façon fonctionne:
A(cv::Rect_<int>(0,0,2,2)) = 1.0
Quel est le problème avec la première approche?
Vous devez vous connecter pour publier un commentaire.
Je préfère un one-liner, mais cela fait l'affaire:
cv::Mat tmp = A(cv::Rect(0,0,1,1))
à la place?Révisé réponse
Je crois que la raison de votre première méthode
ne fonctionne pas est parce que l'opérateur d'affectation
=
ne copie pas les valeurs, mais qui modifie l'en-tête d'une matrice de point à un submatrix de l'autre. Par conséquent, tous les cette ligne n'est de créer un temporaire de l'en-tête de la matrice de pointage à la submatrix de Un, puis de remplacer l'en-tête de cette matrice temporaire à point B. puis l'oublier. Les données de A et B reste inchangé.Ce que vous voulez (bien que je n'ai pas testé) est
Vous pouvez le faire en une seule ligne avec:
N'ayez pas peur de travailler avec des pointeurs
À de nombreux Matlab temps