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 }    

 

posted @ 2017-03-11 17:26  变通无敌  阅读(1055)  评论(0编辑  收藏  举报