Проблема захвата веб-камеры OpenCV - PullRequest
9 голосов
/ 13 декабря 2010

Я установил OpenCV 2.2 и теперь не могу заставить работать захват с веб-камеры. Это работало нормально в 2.1. OpenCV обнаруживает веб-камеру, не сообщает о каких-либо ошибках или предупреждениях, но каждый кадр представляет собой серое изображение. Я даже попробовал пример кода из OpenCV вики:

VideoCapture cap(0); // open the default camera
if(!cap.isOpened())  // check if we succeeded
    return -1;

Mat edges;
namedWindow("edges",1);
for(;;)
{
    Mat frame;
    cap >> frame; // get a new frame from camera
    cvtColor(frame, edges, CV_BGR2GRAY);
    //GaussianBlur(edges, edges, Size(7,7), 1.5, 1.5);
    //Canny(edges, edges, 0, 30, 3);
    imshow("edges", edges);
    if(waitKey(30) >= 0) break;
}
// the camera will be deinitialized automatically in VideoCapture destructor
return 0;

Кто-нибудь сталкивался с этой проблемой? Я использую 64-битную Win7 и Visual Studio 2010.

Ответы [ 8 ]

9 голосов
/ 14 декабря 2010

Я нашел решение после очень долгого поиска.

Проблема в том, что если не возникает задержка между показом кадров, эта проблема.

Решение поставлено cvWaitKey(20); в петлю.

3 голосов
/ 31 июля 2012

Вот решение.

Каждый захваченный кадр изображения преобразуется в изображение в градациях серого в первой строке ниже. Комментирование и запуск только кода приведут к ошибке, поскольку вы не захватываете обработанное изображение в рамку границ, которая отображается в imshow.

Следовательно, прокомментируйте строку cvtColor и измените второй параметр в imshow на frame. Это позволит вам отображать цветное видео с веб-камеры.

cvtColor(frame, edges, CV_BGR2GRAY);

imshow("edges", frame);
3 голосов
/ 15 декабря 2010

Проблема была с камерой, которую я использовал, MSFT LifeCam. Я пробовал Logitech C210 и 120, и они оба работают нормально.

1 голос
/ 13 декабря 2010

Я действительно ничего не знаю об OpenCV, но разве проблема не в следующей строке?

cvtColor(frame, edges, CV_BGR2GRAY);

Похоже, вы намеренно преобразуете цветовое пространство B-G-R в пространство в градациях серого.

Разве это не должно быть что-то вроде:

cvtColor(frame, edges, CV_BGR2RGB);
0 голосов
/ 03 февраля 2016

Попробуйте это:

VideoCapture cap(0); // open the default camera
if(!cap.isOpened())  // check if we succeeded
{
  cout<<"Cam not captured\n";
}

Mat frame;
namedWindow("frame");
for(;;)
{
    cap >> frame; // get a new frame from camera
    imshow("frame", frame);

    if(waitKey(10) >= 0) break;
}

return 0;
0 голосов
/ 07 января 2015

Я использую cvtColor и обнаружил, что

cvtColor(image,image,CV_BGR2RGB); не работает.

Но хорошие новости в том, что это изменение работает !!Также включите:

include opencv2/imgproc/imgproc.hpp

и в файле .pro библиотеку:

-lopencv_imgproc 
0 голосов
/ 15 февраля 2013

У меня была такая же проблема. Я подумал, что это могут быть настройки на моей камере, потому что у меня должен был быть вход 640x480px (который я не мог отрегулировать), и я не мог настроить разрешения для канала. Поэтому я установил виртуальную веб-камеру, которая в значительной степени разрешила обе проблемы. Я получил диалог ввода, выбрал виртуальную камеру, и она работала. Мне удалось установить его в приложении 640x480.

Моя виртуальная камера называлась ManyCam, но, похоже, она сделана для девочек-подростков, хотела, чтобы я установила 3 ​​других приложения, и я до сих пор не уверена, что в ней нет «дополнительных» троянов.

Тем не менее, он позволяет вам настраивать цвета, оттенок, контраст и т. Д. И другие вещи, которые могут вам понадобиться для тестирования.

0 голосов
/ 23 апреля 2012

Вы также можете попробовать этот пост .

Проще говоря, изменив

с

import cv

на

importcv2.cv как cv

работал для меня.Смотрите также пост здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...