我不断得到这个基本代码的分段错误。我是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