Mat的复制

Posted 变通无敌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mat的复制相关的知识,希望对你有一定的参考价值。

转自:http://blog.csdn.net/patkritlee/article/details/52782086

OpenCV中使用Mat,经常会碰到这样一种场景,会想拷贝一份Mat,并对新的Mat进行操作。但是OpenCV中的clone()和直接赋值都会导致共享数据区,也就是相当于&。

而使用copy,才会获取新的Mat。

 1 #include <iostream>    
 2 #include <highgui.h>    
 3     
 4 using namespace std ;    
 5 using namespace cv ;    
 6     
 7 int main()    
 8 {    
 9     Mat image = imread("1.png" , 0) ;    
10         
11     //Mat image1(image) ;//仅是创建了Mat的头部分,image1与image共享数据区    
12     //Mat image1 = image ;//仅是创建了Mat的头部分,image1与image共享数据区    
13     //Mat image1 = image.clone() ;//完全拷贝,把image中的所有信息拷贝到image1中    
14     Mat image1 ;    
15     image.copyTo(image1) ;//拷贝image的数据区到image1中,在拷贝数据前会有一步:image1.create(this->size , this->type)    
16     for(int h = 0 ; h < image1.rows ; ++ h)    
17     {    
18         uchar* ptr = image1.ptr(h) ;    
19         for(int w = 0 ; w < image1.cols ; ++ w)    
20         {    
21             ptr[w] = 0 ;    
22         }    
23     }    
24     imshow("image" , image) ;    
25     imshow("image1" , image1) ;    
26     waitKey() ;    
27     return 0 ;    
28 }    

 

以上是关于Mat的复制的主要内容,如果未能解决你的问题,请参考以下文章

将 MAT 图像复制到 C++ 中的特定地址

为啥将 cv::Mat 的一列复制到向量中失败?

有趣的 C++ 代码片段,有啥解释吗? [复制]

这两个代码片段之间有区别吗?如果有,那又如何? [复制]

什么是在 C++ 中获取总内核数量的跨平台代码片段? [复制]

opencv 将数据从 *Mat 复制到 Mat