1

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

4

1 回答 1

1

这是看到您的代码后的空运行告诉我的:-

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

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

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

于 2014-03-27T14:02:54.487 回答