OpenCV 子矩阵访问:复制还是参考?

OpenCV submatrix access: copy or reference?

如果我使用

从矩阵中提取子矩阵
cv::Mat A = cv::Mat::ones(4,4);

cv::Mat B = A( cv::Rect( 1, 1, 2, 2 ) );

"B" 是 "A" 中这些值的副本还是引用了这些值?

能否举例说明如何获得

(1) 子矩阵的副本?

(2) 对子矩阵的引用?

B 是 A 的 Mat-header 的副本,但引用了相同的像素。

所以,如果你操纵 B 的像素,A 也会受到影响。

(1) (a 'deep copy') 将是:

cv::Rect r( 1, 1, 2, 2 );
cv::Mat A = cv::Mat::ones(4,4);
cv::Mat B = A(r).clone(); // now B has a seperate *copy* of the pixels

cv::Mat C; 
A(r).copyTo(C);           // another way to make a 'deep copy'

(2) (a 'shallow copy'),这就是你在上面所做的:

cv::Mat B = A(r);         // B points to A's pixels