c++ - OpenCV 子矩阵访问 : copy or reference?

标签 c++ opencv matrix reference copy

如果我使用以下方法从矩阵中提取子矩阵

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/

相关文章:

c++ - Opencv2.4.9 SimpleBlobDetector 掩码不起作用

arrays - 消除元素顺序不同的重复向量

c++ - 为什么不能访问自 Windows 95 以来另一个进程的地址空间?

python - OpenCV 2.1 Python 绑定(bind)段错误

c++ - 具有与接口(interface)方法完全相同签名的静态方法的 C++ 类的优点是什么

opencv - 使用 OPENCV 将图像的裁剪部分提取到单独的图像中

matlab - 如何在Matlab中从矩阵中随机选择x个索引

Android OpenCV 图像校正

c++ - 删除对象列表中的相似项目

c++ - 将 Lisp 转换为 C++