C++ OpenCV不释放摄影机
我试图在OpenCV中释放相机,并在另一时间重新初始化,但问题是,我无法正确释放相机。询问OpenCV,cv::VideoCapture,相机是否打开,它说是关闭的,但小LED仍然发光,我无法在同一个相机周围创建另一个VideoCapture对象 这是我使用的include: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;
#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的更新。谢谢你的帮助。