Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenCV C++;。返回垫子,然后将其保存到文件_C++_Opencv - Fatal编程技术网

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

C++ OpenCV C++;。返回垫子,然后将其保存到文件,c++,opencv,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()){

我一直在使用这个基本代码时遇到分段错误。我是新的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;
}
int main()
{
cv::Mat pic1;
pic1=拍摄照片();
imwrite(“/home/pi/***/images/pic1.jpg”,pic1);
}
简历::Mat takePicture(){
cv::Mat-pic;
摄像机(0);
而(!cam.isOpened()){
std::cout-pic;
返回pic;
}
在发布这个问题之前,我查看了以下链接,但所说的似乎没有帮助。我也尝试过通过引用传递。

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

当您说
pic1=takePicture()
时,它会调用cv::Mat的复制构造函数。cv::Mat的复制构造函数只复制标题,而不复制整个数据。因此,当
pic
超出范围时,它的对象会被销毁,数据也会被销毁

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


有关复制构造函数的更多信息,请参见此处:

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

当您说
pic1=takePicture()
时,它会调用cv::Mat的复制构造函数。cv::Mat的复制构造函数只复制标题,而不复制整个数据。因此,当
pic
超出范围时,它的对象会被销毁,数据也会被销毁

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


有关复制构造函数的更多信息,请参见此处:

如果您执行“return pic.clone()”操作,该怎么办?谢谢Ivan。但是为什么?这里发生了什么:Sto解释:在您尝试保存图片时,捕获已经覆盖了您的图片。这就是为什么您需要克隆它(保存副本)的原因。如果执行“return pic.clone()”操作,该怎么办?成功了。谢谢伊万。但是为什么?这里发生了什么:解释:当你试图保存照片时,捕获已经覆盖了你的照片。这就是为什么你需要克隆它(保存副本)