C++ OpenCV C++;。返回垫子,然后将其保存到文件
我一直在使用这个基本代码时遇到分段错误。我是新的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()){
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()”操作,该怎么办?成功了。谢谢伊万。但是为什么?这里发生了什么:解释:当你试图保存照片时,捕获已经覆盖了你的照片。这就是为什么你需要克隆它(保存副本)