大家好!我使用OpenCV与c++ API,为了使我的项目更可靠,我需要一个特定的相机连接断开处理。我搜索了"如何",但我只能找到需要一个丑陋的hack才能做到的答案。
你能建议一种更干净的方法吗?
感谢
检测相机连接/断开可能需要一些技巧。
我建议你启动另一个线程来检查cvCreateCameraCapture()
在循环中的成功,而你的应用程序正在运行。
类似如下:
while (run_detection_thread) // global variable controlled by the main thread
{
CvCapture* capture = cvCreateCameraCapture(-1); //-1 or whatever number works for you
if (camera) //camera is connected
{
sleep(1);
}
else
{
// camera was disconnected
}
}
我认为我有一个很好的解决这个问题的方法。我创建了一个辅助Mat数组,与相机输出的分辨率相同。我将它分配给Mat数组,然后将从相机捕获的帧分配给Mat数组,最后检查该数组的规范。如果它等于零,则表示没有从相机捕获新的帧。
VideoCapture cap(0);
if(!cap.isOpened()) return -1;
Mat frame;
cap >> frame;
Mat emptyFrame = Mat::zeros(CV_CAP_PROP_FRAME_WIDTH, CV_CAP_PROP_FRAME_HEIGHT, CV_32F);
for(;;)
{
frame = emptyFrame;
cap >> frame;
if (norm(frame) == 0) break;
}