相机连接和断开连接

时间:2011-04-12 15:07:14

标签: c++ opencv

嘿伙计们, 我正在使用OpenCV和C ++ API,为了让我的项目更可靠,我需要一定的摄像头连接\断开处理。 我已经搜索了操作方法,但我只能找到需要丑陋黑客的答案才能这样做。

你能建议一个更干净的方法吗?

日Thnx

2 个答案:

答案 0 :(得分:0)

检测相机连接/断开可能需要一些技巧。

我建议您在应用程序运行时启动另一个线程来检查循环中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        
  }
}

答案 1 :(得分:0)

我认为我对此问题有一个很好的解决方法。我创建了一个带有零的辅助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;
}