opencv — 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), что абсолютно нормально.

1

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]