Advertisement

Does OpenCV cv::Mat perform a deep copy?

阅读量:

注释中记载了数据拷贝是否实际发生。

所谓深度复制,即生成的mat对象具备独立的元素存储区域。而浅层复制则仅生成mat的头部信息,其内部元素存储仍与其他对象共享。

复制代码
    cv::Mat change(cv::Mat mat)
    {
    	cv::Mat m5 = mat;//未发生数据拷贝
    	m5.at<float>(0,0)  = 1000;//所有mat里这这个值都变成了1000!!!!
    	return m5;//未发生数据拷贝
    }
    
    class A
    {
    public:
    A(cv::Mat mat):a(mat.clone()){}//需要用这种clone的方式初始化a,否则a和外部的mat还是使用
    							   //同一块data,外部mat被修改后,a也被修改
    //A(cv::Mat mat):a(mat){}
    void print()
    {
        std::cout<<a<<std::endl;
    }
    	
    	cv::Mat a()
    	{
    		return a.clone();//返回的时候也需要clone(),否则外部一样可以修改到a
    	}
    
    private:
    cv::Ma

全部评论 (0)

还没有任何评论哟~