OpenCV拷贝与ROI
来源:互联网 发布:大数据进阶 编辑:程序博客网 时间:2024/06/08 06:14
OpenCV的Mat变量之间拷贝分浅拷贝和深拷贝(由于3.0以后对IplImage变量不再使用,所以这里仅考虑Mat变量)
一. 浅拷贝
Mat a;Mat b = a; //a "copy" to bMat c(a); //a "copy" to c
注意:浅拷贝不复制数据只创建矩阵头,实现数据共享,更改a, b, c三个变量中的任意一个都会对另外2个产生同样的作用。
二. 深拷贝
Mat a, b, c, d;a.copyTo(b); // a copy to bc = a.clone(); // a copy to ca.convertTo(d, a.type()); // a copy to d
注意:深拷贝是完全拷贝,拷贝完成后得到一个独立的变更,数据自治,更改a, b, c, d四个变量中的任意一个都不会影响其它变量。
三. ROI
1. 浅拷贝
Mat B = A(Range::all(), Range(1, 3));Mat B = A(Rect(0,0,100,100));
A和B共享内存,B只获得了A中ROI区域的位置信息,如下图(懒得画图了,从网上找了张图,变量不对应,请领会精神!)
2. 深拷贝
opencv中给出的例子是
Rect r(1, 1, 10, 20); // 指定src 的 ROI子图像区域Mat dstroi =dst(Rect(0,10,r.width,r.height)); // 拿到 dst指定区域子图像的引用src(r).convertTo(dstroi, dstroi.type(), 1,0); // ROI子图像之间的复制
此时,无需指定图像的ROI,计算与方便,清晰
另外,还可以用mask来拷贝,这里只给出一种方法,还会有不同的方法
main(){ Mat matSrc = imread("e:/template/lena.jpg"); Mat matDst; Mat matMask(matSrc.size(),CV_8UC1,Scalar(0)); Rect rect(0, 0, 100, 100); //绘制mask rectangle(matMask,rect,Scalar(255),-1); //带有mask的copyto matSrc.copyTo(matDst,matMask); waitKey(); return 0; }
阅读全文
0 0
- OpenCV拷贝与ROI
- OpenCV Mat 拷贝与ROI
- 【学习OpenCV】矩阵的ROI拷贝
- opencv ROI(感兴趣区域)与掩码操作 ROI图像融合
- opencv roi
- opencv ROI
- opencv:ROI
- Opencv 图片ROI与图片融合
- opencv(11)---ROI与mask图像
- OPENCV不规则ROI-圆形ROI
- Opencv 使用Rect选取与设置窗口ROI
- 【OpenCV学习笔记】十三、ROI与mask掩码
- opencv从零开始——2. ROI与线性融合
- Opencv 使用Rect选取与设置窗口ROI
- opencv浅拷贝与深拷贝
- opencv设置ROI
- OpenCV Circular ROI
- Opencv draw ROI rect
- linux 下获取当前时间精确到微妙
- JAVA多线程的一点知识
- 第六周周总结
- B/S和C/S的区别及应用
- jquery选择器
- OpenCV拷贝与ROI
- 卷积神经网络(Convolutional Neural Network)
- AndroidStudio(3.0.x版本)输入法无提示问题解决方案
- invalid mode 报错
- leetcode 698. Partition to K Equal Sum Subsets
- 消息机制——MQ
- 电脑无线网络无缘无故自动关闭,适配器正常,网络正常却怎么连都连不上?
- FPGA中韩彬(大神)的异步复位,同步释放方法
- 【代码笔记】【c#】将数组的某一索引位置的元素移动到指定索引位置