小编fly*_*gip的帖子

OpenCV cv :: Mat的深层副本

复制的行为cv::Mat让我很困惑.

我从文档中了解到Mat::copyTo()深层复制,而赋值运算符则不是.我的问题:

  1. 我该怎么做才能cv::Mat从函数中返回一个,比如:cv::Mat func()

  2. 根据文档,如果我返回cv::Mat它将没有用,因为在函数返回后该函数的本地副本cv::Mat将被销毁,因此接受函数外部返回值的那个应该指向一些随机地址.奇怪的是(大多数情况下)它正常工作.例如,以下工作:

    cv::Mat CopyOneImage(const cv::Mat& orgImage)
    {
    
        cv::Mat image;
        orgImage.copyTo(image);
        return image;
    
    }
    
    int main()
    {
    
        std::string orgImgName("a.jpg");        
        cv::Mat orgImage;
        orgImage = cv::imread(orgImgName);
    
        cv::Mat aCopy;
        aCopy = CopyOneImage(orgImage);
    
        return 1;
    }
    
    Run Code Online (Sandbox Code Playgroud)

但为什么?这不是一个深刻的副本.

问题3.有时,赋值运算符似乎也是深层复制:

    int main()
    {

        std::string orgImgName("a.jpg");        
        cv::Mat orgImage;
        orgImage = cv::imread(orgImgName);

        cv::Mat aCopy;
        orgImage.copyTo(aCopy);

        cv::Mat copyCopy1;
        copyCopy1 = aCopy;

        cv::namedWindow("smallTest", 1);
        cv::imshow("smallTest", copyCopy1);
        uchar key = (uchar)cv::waitKey();

        cv::Mat orgImage2 = cv::imread("b.jpg");
        orgImage2.copyTo(aCopy);

        cv::imshow("smallTest", …
Run Code Online (Sandbox Code Playgroud)

c++ opencv deep-copy

26
推荐指数
2
解决办法
4万
查看次数

标签 统计

c++ ×1

deep-copy ×1

opencv ×1