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
如果我使用
从矩阵中提取子矩阵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