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++_Opencv_Camera - Fatal编程技术网

C++ OpenCV不释放摄影机

C++ OpenCV不释放摄影机,c++,opencv,camera,C++,Opencv,Camera,我试图在OpenCV中释放相机,并在另一时间重新初始化,但问题是,我无法正确释放相机。询问OpenCV,cv::VideoCapture,相机是否打开,它说是关闭的,但小LED仍然发光,我无法在同一个相机周围创建另一个VideoCapture对象 这是我使用的include: #include <opencv2/opencv.hpp> #包括 这是一个显示问题的代码示例: cv::VideoCapture cap(0); for(int i = 0; i < 20;

我试图在OpenCV中释放相机,并在另一时间重新初始化,但问题是,我无法正确释放相机。询问OpenCV,cv::VideoCapture,相机是否打开,它说是关闭的,但小LED仍然发光,我无法在同一个相机周围创建另一个VideoCapture对象

这是我使用的include:

  #include <opencv2/opencv.hpp>
#包括
这是一个显示问题的代码示例:

cv::VideoCapture cap(0);

for(int i = 0; i < 20; i++) {
    cv::Mat frame;
    cap >> frame;

    cv::imshow("Test", frame);
    if (cv::waitKey(30) >= 0) { break; }
}

cap.release();
std::cout << "Camera is closed is : " << !cap.isOpened() << std::endl;

while(true) {
    if (cv::waitKey(30) >= 0) { break; }
}
cv::视频捕获上限(0);
对于(int i=0;i<20;i++){
cv::垫架;
cap>>框架;
cv::imshow(“测试”,框架);
如果(cv::waitKey(30)>=0){break;}
}
释放帽();

std::cout这可能是OpenCV 2.4.8在某些设备上的错误,您应该检查他们的错误跟踪器,并将此问题发布到那里

可以通过将变量
cap
放入另一个作用域来解决此问题:

{
    cv::VideoCapture cap(0);

    for(int i = 0; i < 20; i++) {
        cv::Mat frame;
        cap >> frame;

        cv::imshow("Test", frame);
        if (cv::waitKey(30) >= 0) 
            break;
    }
} 

/* At this point, cap was destroyed and your camera should be operational again */     

{
    cv::VideoCapture cap(0);

    for(int i = 0; i < 20; i++) {
        cv::Mat frame;
        cap >> frame;

        cv::imshow("AnotherTest", frame);
        if (cv::waitKey(30) >= 0) 
            break;
    }
}
{
cv::视频捕获上限(0);
对于(int i=0;i<20;i++){
cv::垫架;
cap>>框架;
cv::imshow(“测试”,框架);
如果(cv::waitKey(30)>=0)
打破
}
} 
/*此时,cap已被破坏,您的相机应可再次运行*/
{
cv::视频捕获上限(0);
对于(int i=0;i<20;i++){
cv::垫架;
cap>>框架;
cv::imshow(“另一个测试”,框架);
如果(cv::waitKey(30)>=0)
打破
}
}
文件上说摄像机将在VideoCapture析构函数中自动去初始化

代码应该足以解决问题。但正如您所注意到的,问题仍然存在,因此可能是以下两种情况之一:

  • 这确实是OpenCV内部的一个问题
  • 相机的驱动程序有一个bug,所以更新它可能会解决这个问题

2.4.8,抱歉忘了提到刚刚测试了代码,但失败了,上面写着:HIGHGUI错误:V4L/V4L2:VIDIOC_CROPCAP HIGHGUI错误:V4L/V4L2:VIDIOC_CROPCAP VIDIOC_REQBUFS:设备或资源繁忙VIDIOC_QBUF:错误的文件描述符前两个错误并不重要,它们出现在OpenCV的任何版本中。好的,在作用域结束之前调用
cap.release()
。不管怎样,文档上说,所以我的代码应该足以解决这个问题。但正如您所注意到的,问题仍然存在,所以很可能这是OpenCV上的问题。也不起作用。奇怪的是,当我在调用release()后问cap它是否关闭时,它说它已关闭…只是检查了一下,我想我会按照你的建议等待OpenCV的更新。谢谢你的帮助。