OpenCV C++.返回垫子然后将其保存到文件

OpenCV C++. Returning a Mat then saving it to file

本文关键字:存到文件 然后 C++ 返回 OpenCV      更新时间:2023-10-16

我不断得到这个基本代码的分段错误。我是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 在函数内更改垫子(垫子范围)

这就是看到你的代码的试运行告诉我的:-

当你说pic1 = takePicture()时,它调用 cv::Mat 的复制构造函数。cv::Mat 的复制构造函数仅通过复制标头而不是整个数据来工作。因此,当pic超出范围时,它的对象被销毁,数据也会被销毁。

你可以做pic1 = takePicture().clone()

有关复制构造函数的更多信息,请访问:https://stackoverflow.com/a/11019585/1933672