Alex Rivera | Logout

In OpenCV 2.1: How to assign a matrix to a submatrix of another matrix?

Asked 2010-10-27T08:30:44.123
24

Assume I have a matrix

A = cv::Mat(3,3,CV_32F) 

and a matrix

B = cv::Mat(2,2,CV_32F).

Let's say A has all zeros and B has all ones. I want to assign the values of B to the upper left corner of A. How can I do this?

I tried the following:

A(cv::Rect_<int>(0,0,2,2)) = B

But this doesn't seem to work. However assigning a scalar value to the subrect of A this way does work:

A(cv::Rect_<int>(0,0,2,2)) = 1.0

What is wrong with the first approach?

Edit
Report

1 Answer

15

Revised answer

I believe the reason your first method

A(cv::Rect_<int>(0,0,2,2)) = B

doesn't work is because the assignment operator = does not copy values but modifies the header of a matrix to point at a submatrix of another. Therefore all this line does is create a temporary header matrix pointing to the submatrix of A, and then replace the header of that temporary matrix to point at B. And then forget about it. The data in A and B remains unchanged.

What you want (although I've not tested it) is

B.copyTo(A(cv::Rect_<int>(0,0,2,2)))
answered 2012-09-25T17:03:37.570

Your Answer