我一直在使用这个基本代码获取分段错误。我是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)
答案 0 :(得分:1)
这是看到你的代码告诉我的干涸: -
当你说pic1 = takePicture()
时,它会调用cv :: Mat的复制构造函数。 cv :: Mat的复制构造函数只能复制标题,而不是整个数据。结果当pic
超出范围时,它的对象被破坏,数据也被破坏。
你可以pic1 = takePicture().clone()
有关此处提供的复制构造函数的更多信息:https://stackoverflow.com/a/11019585/1933672