C++: OpenCV2.4.11(!) Доступ к параметрам веб-камеры

Это прямое продолжение последнего вопроса, который я задал, который был удачно назван "C++: OpenCV2.3.1(!) Доступ к параметрам веб-камеры" и где мне сказали установить вместо него OpenCV2.4.11 (OpenCV3.0 не работал)... что я и сделал. И да, большая часть этого текста является точной копией и вставкой последней темы, так как моя проблема на самом деле не исчезла...

Опять же, я искал здесь, на других форумах (Google, OpenCV и т. Д.), Посмотрел код библиотеки videoInput, различные заголовочные файлы и особенно highgui_c.h в OpenCV и, похоже, все еще не может найти ответ на этот вопрос. простой вопрос:

Как изменить экспозицию и усиление (или, вообще говоря, любое свойство веб-камеры) в моей веб-камере Logitech C310 с OpenCV2.4.11 так же, как с OpenCV2.1.0? (с использованием Win7 64-bit, Visual Studio 10)

РЕДАКТИРОВАТЬ: Это было решено. Я не знаю как, но когда я тестировал свой код этим утром, он смог сообщить и установить экспозицию с помощью VideoCapture и метода set/get.

Я знаю, что есть удобный и простой метод получения и установки VideoCapture, похожий на функции VideoInput [Set/Get]VideoSetting[Camera/Filter]. Вот мой короткий пример в OpenCV2.4.11, который не работает:

РЕДАКТИРОВАТЬ: Это работает сейчас. Что я не понимаю, так это то, что значения нескольких свойств представлены как -8.58993E + 008 (а именно: оттенок, монокром, гамма, температура, увеличение, фокусировка, панорамирование, наклон, поворот и диафрагма) и это свойство 6 (fourcc) составляет -4,66163E + 008. Я знаю, что у меня нет этих функций на моей веб-камере, но все другие не реализованные функции сообщают -1.

int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, char* CmdArgs, int CmdShow) {
    int device0 = 0;
    VideoCapture VC(device0);
    if(!VC.isOpened())  // check if we succeeded
        return -1;
    ostringstream oss;
    double CamProp;
    for(int i=-4; i<27; i++) {
        CamProp = VC.get(i);
        Sleep(5);
        oss << "Item " << i << ": " << CamProp << "\n";
    }

    MessageBox(NULL, oss.str().c_str(), "Webcam Values", MB_OK);

    return 0;
}

Он компилирует, запускает, хорошо обращается к веб-камере (и даже показывает картинку с imshow, если я добавлю ее в код), но открывает только красивое окно, в котором говорится следующее:
Элемент -4: 0
Элемент -3: 0
Элемент -2: 0
...
Элемент 2: 0
Элемент 3: 640
Элемент 4: 480
Элемент 5: 0
...
Элемент 25: 0
Элемент 26: 0

РЕДАКТИРОВАТЬ: см. Выше, это работает сейчас. Я получаю значения для всех поддерживаемых параметров, таких как экспозиция, усиление, резкость, яркость, контрастность и так далее. Возможно я все еще связывался с библиотеками 2.3.1 или чем-то еще.

Дело в том, что все это можно было легко настроить с помощью этой камеры в OpenCV 2.1.0 с использованием videoInput. У меня было запущенное приложение, делающее собственное освещение вместо использования функций Logitech (RightLight, Auto Exposure, Auto Whitebalance). Теперь настройка и получение параметров были интегрированы в HighCi OpenCV довольно долгое время, но с сильно сокращенным списком функций (без запроса диапазонов параметров, Min/Max/Stepwidth..., без настройки автоэкспозиции, RightLight и подобных вещей) и по какой-то причине он несовместим с моей веб-камерой Logitech. Я могу сообщить о резолюции, но больше ничего.

РЕДАКТИРОВАТЬ: Я все еще скучаю по Min, Max, Step, Авто / Ручной функции videoInput. Я могу установить значение, но я не знаю, разрешено ли это.

Код videoInput теперь объединен с кодом OpenCV в файле cap_dshow.cpp, но я не могу найти заголовочный файл, который объявляет класс videoInput и просто использование моего старого кода не работает. Итак, у меня есть файл cpp, который содержит все функции, которые мне нужны, и которые, как я знаю, выполнили для меня работу некоторое время назад, но к которым я сейчас не могу получить доступ. Любые подсказки о том, как это сделать? Кто-нибудь получал доступ и изменял параметры камеры в OpenCV2.4.11, используя интерфейс videoInput/DirectShow?

РЕДАКТИРОВАТЬ: Кажется, что это произошло сейчас в рабочем порядке, в отличие от 2.3.1. Прямое взаимодействие с videoInput не требуется. Однако было бы неплохо иметь его по вышеупомянутым причинам.

Есть также забавная проблема, что с использованием, например,

VideoCapture cam(0)

адрес точно такой же камеры, как

VideoCapture cam(1)

или же

VideoCapture cam(any integer value)

что мне кажется странным и намекает в том же направлении - что CVC VideoCapture не работает для меня должным образом. Подобная проблема описана здесь, но я также попробовал код с Sleep(1000) после открытия захвата - безуспешно.

РЕДАКТИРОВАТЬ: Это также работает правильно сейчас. Я получаю свою веб-камеру с (0) и ошибку с (1), что абсолютно нормально.

0 ответов

Другие вопросы по тегам