Не могу получить доступ к веб-камере с OpenCV - PullRequest
3 голосов
/ 20 января 2011

Я использую OpenCV 2.2 с Visual Studio 2010 на 64-битном ПК с выигрышем 7

Я могу отображать изображения и воспроизводить AVI-файлы через OpenCV, как указано в книге «Изучение OpenCV», но не могу захватывать изображения с веб-камеры. Даже образцы, данные вместе с файлами OpenCV, не могут получить доступ к веб-камере.

Меня спрашивают «источник видео -> источник захвата», и есть два варианта: веб-камера HP Splitter и веб-камера HP. Если я выберу веб-камеру HP, окно закроется сразу же, без каких-либо ошибок. (Я думаю, что любое сообщение об ошибке слишком быстро, чтобы увидеть, прежде чем оно закрывается). Если я выберу разделитель веб-камеры HP, то новое окно, куда должны поступать изображения с веб-камеры (видео), будет заполнено равномерным серым цветом. Индикатор веб-камеры включен, но видео не видно. Моя веб-камера отлично работает со вспышкой (www.testmycam.com) и с DirectShow http://www.codeproject.com/KB/audio-video/WebcamUsingDirectShowNET.aspx

Я попытался получить сообщение об ошибке, используя это:

#include "cv.h"
#include "highgui.h"
#include <iostream>
using namespace cv;
using namespace std;

int main(int, char**)
{
    VideoCapture cap("0"); // open the default camera
    if(!cap.isOpened())  // check if we succeeded
       {
     cout << "Error opening camera!";
     getchar();
     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;
}

И сообщение об ошибке, которое я получил, было:

warning: Error opening file (C:\Users\vp\work\ocv\opencv\modules\highgui\src\cap
_ffmpeg.cpp:454)
Error opening camera!

Я не знаю, что это за "cap_ffmpeg.cpp", и я не знаю, если это какая-то проблема с любопытным "HP Media Smart".

Любая помощь будет принята с благодарностью.

Ответы [ 8 ]

12 голосов
/ 15 марта 2011

У меня была такая же проблема на Windows 7 64-bit. Мне пришлось перекомпилировать opencv_highgui, изменив «Определения препроцессора» на панели C / C ++ страницы свойств, чтобы включить:

HAVE_VIDEOINPUT HAVE_DSHOW

Надеюсь, это поможет

1 голос
/ 27 февраля 2011

У меня возникла такая же проблема. Индикатор моей веб-камеры Vaio включен, но на экране нет изображения. Затем я попытался экспортировать первый кадр в файл JPEG и он работает. Затем я попытался вставить задержку в 33 мс, прежде чем захватывать любой кадр, на этот раз он работает как шарм. Надеюсь, это поможет.

1 голос
/ 15 февраля 2011

Я только что перешел на OpenCV 2.2, и у меня, по сути, та же проблема, но 32-битная компоновка под управлением Vista.Веб-камера запускается, но я получаю сообщение об ошибке, устанавливающее свойство width для камеры.Если я специально запрашиваю камеру DirectShow, cvCreateCameraCapture потерпит неудачу.
Я думаю, что происходит то, что дистрибутивная версия HighGUI была собрана без учета камеры DirectShow.Предпочтительной камерой Windows на OpenCV была видео для Windows, VFW, но она устарела с момента выхода Windows Vista и создавала всевозможные проблемы.Почему они не включают это, я не знаю.Проверьте исходный файл cap.cpp

Мой следующий шаг - перестроить HighGUI самостоятельно и убедиться, что установлен флаг HAVE_DSHOW.Кажется, я помню ту же проблему с последней версией OpenCV, которую я использовал, пока я не перестроил ее, убедившись, что версия DirectShow была включена.

1 голос
/ 04 февраля 2011

Недавно я установил OpenCV 2.2 и NetBeans 6.9.1.У меня была проблема с захватом камеры, изображение в окне было черным, но программа работает отлично, без ошибок.Мне пришлось запустить NetBeans от имени администратора, чтобы решить эту проблему.

Надеюсь, это поможет вам всем.

1 голос
/ 24 января 2011

Вот статья, которую я написал некоторое время назад.Он использует библиотеку videoInput для получения информации с веб-камер.Он использует DirectX, поэтому он работает практически с любой веб-камерой. Захват изображений с помощью DirectX

1 голос
/ 20 января 2011

cap_ffmpeg.cpp - это исходный файл, который использует ffmpeg для захвата устройства. Если приведенный в OpenCV пример по умолчанию не работает с вашей веб-камерой, вам не повезло. Я предлагаю вам купить еще один, который поддерживается.

0 голосов
/ 02 ноября 2012

После создания cv::VideoCapture вы должны дать целое число, а не строку (поскольку строка подразумевает, что вход является файлом).

Чтобы открыть камеру по умолчанию, откройте потокс

cv::VideoCapture capture(0); 

и все будет работать нормально.

0 голосов
/ 18 мая 2011

CMAKE GUI, MSVC ++ 10E, Vista 32bit, OpenCV2.2

Похоже, опция HAVE_VIDEOINPUT/WITH_VIDEOINPUT не работает

Однако добавление: /D HAVE_DSHOW /D HAVE_VIDEOINPUT к CMAKE_CXX_FLAGS и CMAKE_C_FLAGS помогли мне (будут предупреждения из-за переопределений макросов).

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