OpenCV C ++。返回Mat然后将其保存到文件

时间:2013-09-08 05:26:01

标签: c++ opencv

我一直在使用这个基本代码获取分段错误。我是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)

1 个答案:

答案 0 :(得分:1)

这是看到你的代码告诉我的干涸: -

当你说pic1 = takePicture()时,它会调用cv :: Mat的复制构造函数。 cv :: Mat的复制构造函数只能复制标题,而不是整个数据。结果当pic超出范围时,它的对象被破坏,数据也被破坏。

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

有关此处提供的复制构造函数的更多信息:https://stackoverflow.com/a/11019585/1933672