我通过此基本代码不断遇到细分错误。我是C++的新手,真的可以用一只手。这是引起问题的代码片段。

int main ()
{

cv::Mat pic1;

pic1 = takePicture();

imwrite("/home/pi/***/images/pic1.jpg", pic1);

}

cv::Mat takePicture(){
    cv::Mat pic;
    VideoCapture cam(0);
    while(!cam.isOpened()){
        std::cout << "Failed to make connection to cam" << std::endl;
        VideoCapture cam(0);
    }
    cam >> pic;
    return pic;
}

在发布此问题之前,我检查了以下链接,但所说的内容似乎没有帮助。我也尝试通过引用传递。
OpenCV changing Mat inside a function (Mat scope)

最佳答案

这是从看到您的代码后得到的结果:

当您说pic1 = takePicture()时,它将调用cv::Mat的副本构造函数。 cv::Mat的副本构造函数仅通过复制 header 而不是整个数据来工作。结果,当pic超出范围时,它的对象被破坏,数据也被破坏。

你可以做pic1 = takePicture().clone()
有关复制构造函数的更多信息,请参见:https://stackoverflow.com/a/11019585/1933672

关于c++ - OpenCV C++。返回垫子,然后将其保存到文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18680709/

10-11 22:08
查看更多