如果我使用以下方法从矩阵中提取子矩阵
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)(“深拷贝”)将是:
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)(“浅拷贝”),这就是您在上面所做的:
cv::Mat B = A(r); // B points to A's pixels
关于c++ - OpenCV 子矩阵访问 : copy or reference?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27835439/