Подключение камеры и отсоединение - PullRequest
0 голосов
/ 12 апреля 2011

Привет, ребята, я использую OpenCV с C ++ API, и для того, чтобы мой проект был более надежным, мне нужна определенная обработка подключения / отключения камеры.Я искал инструкции, но я мог только найти ответы, которые требуют уродливого взлома, чтобы сделать это.

Можете ли вы предложить более чистый способ сделать это?

Thnx

Ответы [ 2 ]

0 голосов
/ 16 марта 2016

Я думаю, что у меня есть хорошее решение этой проблемы.Я создаю вспомогательный массив 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;
}
0 голосов
/ 12 апреля 2011

Обнаружение подключения / отключения камеры может потребовать некоторых хитростей.

Я предлагаю вам запустить другой поток, чтобы проверить успех 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        
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...