Opencv第一次作业

第一次作业大家差不多都完成了,代码部分不难写

#include
 #include    
 using namespace cv;
 using namespace std;
 Point pt1; 
 Point pt2;  
 int main()
 {	Mat A(640, 480, CV_8UC3, Scalar(255, 255, 255));	//创建Mat的对象时候即可定下大小和颜色
         Mat B = A;	  //可以看作是浅拷贝
         Mat C = A.clone();	//可以看作是深拷贝
         pt1.x =0.9*240 ;	
         pt1.y = 0.9*320;	
         pt2.x = 1.1*240;	
         pt2.y = 1.1*320;	
         rectangle(C,pt1, pt2, Scalar(255, 0, 0), -1, 8, 0);//直接画一个矩形  
         imshow("before_operation", A);
         imshow("after_operation", C);	
         imwrite("A.jpg", A);	
         imwrite("B.jpg", C);	
         waitKey(0);
        return 0;
}

重要的是对代码部分的理解了,大家都体会到了Mat跟指针似乎有着关系。其实我们定义了一个Mat A=imread(“xxxxxx”);此时可以把这个A看成两个部分,一个是存储了图像的部分的大矩阵;另外一个是记录了图像的大小并指向这个图像矩阵的信息头。当你只是简单的Mat B=A;时,你只是将A的信息头拷贝给B而已,相当于引用,给A起了一个别名B,并不会开辟新的内存来存储图像。而使用Mat C=A.clone()时,相当于重新开辟了一个存储图像的内存,重新创建了一个新的信息头。所以说Mat这个类的表现有些像指针,但它不是指针,它还是有存储图像的一部分的,只不过opencv为了防止大图像的复制对速度和内存带来的负担采取了引用机制,但你想完全复制还是可以的。
另外可以试试

Mat A=imread("xxxxxx");
Mat B=A;
Mat B=imread("yyyyyyyy");

会怎么样。

你可能感兴趣的:(学习,opencv)