Как вывести картинку с веб камеры

Захват изображений с веб-камеры через QCamera

В этой статье я расскажу о работе с веб-камерой из Qt5 под Windows (но пример также должен работать под Linux и Mac OS X с установленным плагином gstreamer).

Если интересно, как сделать вот такое приложение и преодолеть возникающие при этом проблемы, то прошу под кат.

Предыстория

Однажды мне захотелось добавить в свою скриншотилку (которая, в принципе, не совсем и скриншотилка) поддержку веб-камеры. Так как в то время я использовал Qt4, то стал искать готовые решения для этой версии, но потом EuroElessar мне подсказал, что в Qt5 есть класс QCamera, который как раз подходил под мои задачи.
Было принято решение перейти на Qt5, которая была все еще в состоянии альфы (да и сейчас только предбета).

Первые проблемы

Первые проблемы начались еще на этапе компиляции. Из-за кривых скриптов/гайдов у меня никак не хотел компилироваться qtwebkit, из-за чего я потерял один вечер, но зато потом весь фреймворк был скомпилирован в виде debug и release версии.

Дальше — интереснее.
Зайдя в примеры для QtMultimedia и найдя там директорию camera, я решил запустить и посмотреть как оно работает.
Тут меня ждала вторая проблема:

Очевидно, что кутям не хватает какого-то плагина. Чтобы его найти, я полез в QtMultimedia\src\plugins. Там мой взгляд первым делом пал на gstreamer, но довольно быстро я понял, что под винду его не откомпилить.

Читайте также:  Беби бон чистить зубы

Затем я там же нашел недописанный directshow.

Direct Show

Откомпилировав этот плагин и положив его в QtBase\plugins\mediaservice, я успешно запустил пример из QtMultimedia, который показал список камер и даже пытался вывести изображение, но у него это получалось плохо и полосато:

Плюнув на это, я стал писать свой код, надеясь, что у меня этой проблемы не будет. И ее действительно не оказалось, зато была другая: разрешение изображений было всегда 320×240. Полистав немного код directshow плагина, я решил пойти спать, чтобы разобраться с этим завтра. Следующий день опять не принес никаких результатов с directshow, зато я полностью дописал код в своем приложении. Поэтому оставалось только одно — добить этот directshow.

На следующий день я нашел решение, которое, как обычно бывает в таких ситуациях, оказалось довольно простым и очевидным. В коде нигде не вызывалась функция updateProperties(), которая получала информацию о поддерживаемых разрешениях, а также в самом конструкторе класса были жестко прописаны размеры 320×240. Исправив эту функцию и добавив ее вызов, я стал получать изображение максимально возможного разрешения.

Теперь переходим непосредственно к коду.

Работа с веб-камерой в Qt5

Так как пример небольшой и служит лишь для демонстрации, то все слоты я описал в конструкторе.

Рисуем формочки

Для начала набросаем в дизайнере две небольшие формы.

webcam.ui — собственно, главное окошко:

webcamselect.ui — служит для выбора веб-камеры, если их установлено несколько:

Заголовочный файл

Здесь я просто приведу код заголовочного файла, потому что комментировать тут нечего.

Выбор камеры

Как можно заметить из webcam.h, у нас в классе присутствует статический член с именем m_defaultDevice, который мы и определим до конструктора:

В самом конструкторе функцией QCamera::availableDevices() получим список камер, а затем проверим есть ли в этом списке наша m_defaultDevice. В зависимости от этого у нас будет два дальнейших пути:
1) Если устройство оказалось в списке, то просто пропускаем этот шаг.
2) Если его там не оказалось, то необходимо вывести диалог с выбором:

Однако, если веб-камер нет, то надо просто выйти с ошибкой, а если она всего одна, то выбрать ее.

Но если веб-камер несколько, то в цикле создадим кнопочки для каждой веб-камеры и покажем диалог:

Здесь очень удобно использовать новый синтаксис сигнал-слотов, чтобы не размазывать код по всему классу, что я и сделал.

После выбора пользователя программа либо выйдет (он нажал на крестик), либо в m_defaultDevice будет id нашего устройства.

Создаем объекты QCamera и QCameraViewfinder

При создании этих объектов никаких проблем возникнуть не должно, поэтому мы просто передаем в конструктор QCamera id камеры и соединяем ее со слотами ошибки и смены состояния:

QCameraViewfinder — это такой объект, который позволяет выводить изображение с веб-камеры сразу на виджет (мы ведь хотим, чтобы пользователь не вслепую себя фотографировал?).

Создаем, устанавливаем минимальный размер (иначе наш виджет невозможно будет уменьшить) и соединяем с объектом камеры:

(Параметр QCamera::CaptureStillImage необходим для того, чтобы можно было захватывать изображения.)

Настройка UI и кнопочки таймера

Создадим новую метку, которая будет рисоваться поверх изображения и вести отсчет, и переменную шаблона для нее:

и наложим ее на viewfinder:

Дальше объявим таймер, который будет запускаться при отсчете и его слот:

Как видно из кода, если время еще есть, то просто уменьшаем его на секунду, а если оно кончилось, то фотографируем, отключая таймер и скрывая счетчик.

Слоты кнопок управления

Так как код у всех них достаточно простой, то приводить его здесь я не буду, но скажу пару слов про QClipboard:

В текущей версии Qt он работает довольно странно: может не записать изображение в буфер (случается редко), либо, пока будет доставать его оттуда, испортить его. Надеюсь, к релизу это поправят.

Захват изображения

Включаем камеру и создаем объект QCameraImageCapture, который должен поддерживать запись в буфер (QCameraImageCapture::CaptureToBuffer), но пишет все равно в файл.

Слот imageSaved() почти дублирует imageCaptured(), поэтому в статье я опишу только его.

Открываем файл, в который камера поместила изображение, и считываем из него картинку, которую затем отзеркаливаем и помещаем в m_pixmap, а затем, растягивая или сжимая по размеру, в QLabel picture. Удаляем файл, чтобы не мусорить.

Функция захвата

Функция захвата, как и все остальные функции, не отличается большей сложностью и состоит из 3-х значимых строк:

Во-первых, фокусируем и блокируем камеру. Блокировку необходимо делать для того, чтобы другое приложение не стало изменять настроенные нами параметры для выполнения снимка.
Во-вторых, делаем снимок в файл, переданный в качестве параметра.
В-третьих, разблокируем камеру.

Остальные функции интереса не представляют и, я думаю, комментировать их смысла нет.

Заключение

Несмотря на то, что Qt5 находится все еще в состоянии даже не беты, такими вещами, как веб-камера, уже можно пользоваться, правда с некоторыми оговорками и решаемыми проблемами.

Исходники приложения можно взять здесь.
Надеюсь, эта статья кому-нибудь поможет.

(Так как это моя первая статья, то обо всех опечатках и ошибках оформления прошу сообщать в личку.)

Источник

Как пользоваться приложением «Камера»

Если у вашего компьютера есть встроенная или подключенная веб-камера, вы можете использовать приложение «Камера», чтобы делать снимки и записывать видео. Чтобы найти приложение «Камера», нажмите Пуск > Камера.

Выберите любой заголовок ниже. Откроется окно для просмотра дополнительных сведений об использовании камеры или веб-камеры.

Чтобы найти приложение «Камера», нажмите Пуск > Камера. Открыв приложение «Камера», выполните следующие действия.

Нажмите кнопку Фото или Видео , затем снова нажмите ее, чтобы сделать фотографию или начать запись видео. Если вы записываете видео, снова нажмите Видео для завершения записи.

Чтобы просмотреть новые или сделанные раньше фотографии или видео, нажмите Пуск > Фотографии , а затем выберите нужную Коллекцию.

Для изменения параметров камеры, таких как сетка кадрирования или качество фотографий, Выберите Пуск > Камера > Параметры .

Если на устройстве несколько камер, например передняя и задняя, переключаться между ними можно следующим образом.

Выберите пуск > Камера > изменить камеру.

В Windows 10 приложение камеры не включает цифровое масштабирование, но вы можете получить эффект, напоминающий изменение масштаба, если сделать фотографию и обрезать ее.

Нажмите кнопку Пуск > P hotos .

Выберите фотографию, которую нужно обрезать.

Нажмите кнопку Обрезка & поворот .

Нажмите кнопку Пропорции , а затем выберите один из стандартных вариантов или перетащите границы на изображении, чтобы ограничить нужную часть фотографии.

Нажмите Сохранить копию > Сохранить.

Вы можете настроить автоматическую отправку фотографий и видеозаписей, созданных с помощью приложения «Камера», в OneDrive, после чего вы сможете найти их на других устройствах.

В поле поиска на панели задач введите в проводнике файл и нажмите кнопку Открыть.

Выберите Этот компьютер, щелкните правой кнопкой мыши папку Изображения и выберите пункт Свойства.

Перейдите на вкладку Расположение и нажмите кнопку Переместить.

Выберите OneDrive > Выбор папки > Переместить.

В поле поиска на панели задач введите Проводник и выберите Открыть.

Выберите Этот компьютер, щелкните правой кнопкой мыши папку Видео и выберите пункт Свойства.

Перейдите на вкладку Расположение и нажмите кнопку Переместить.

Выберите OneDrive > Выбор папки > Переместить.

Приложение «Камера» может использовать информацию о географических широте и долготе, если вы делаете снимки на планшете или камере, которые используют сведения о местоположении и подключены к Интернету или мобильной сети. Для этого:

Нажмите кнопку Пуск > Параметры > расположение > конфиденциальности .

Убедитесь, что служба определения местоположения включена, а затем в разделе Выберите приложения, которые могут получать доступ к вашему точному местоположению включите параметр Камера.

Вы можете выбрать приложения, которым разрешено использовать камеру. Чтобы заблокировать использование камеры для всех приложений, выполните указанные ниже действия.

Нажмите кнопку Пуск > Параметры > Конфиденциальность > камерой .

Включите параметр Разрешить приложениям доступ к камере.

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

Нажмите кнопку Пуск > Параметры > Конфиденциальность > камерой .

Включите Разрешить приложениям использовать камеру.

С помощью переключателей выберите, какие приложения в этом списке будут иметь доступ к камере.

Полностью выключить камеру можно следующим образом.

В поле поиска на панели задач введите диспетчер устройств, затем выберите Диспетчер устройств из списка результатов.

Нажмите стрелку рядом с пунктом Камеры, чтобы развернуть дерево.

Щелкните правой кнопкой мыши камеру, которую необходимо отключить.

Выберите пункт Отключить устройство.

Чтобы приложение «Камера» не могло использовать камеру на устройстве, ее необходимо полностью отключить.

Если после изменения параметров конфиденциальности в работе приложения «Камера» возникают проблемы, закройте его и откройте снова.

Если перестала работать встроенная или подключенная камера, попробуйте сделать следующее.

Отключите камеру от компьютера, а затем снова подключите ее.

Если это не помогает, возможно, проблема связана с драйверами камеры. Вы можете установить обновления драйверов, предоставляемые производителем камеры, или использовать стандартные драйверы компьютера.

Установка обновлений от производителя.

В поле поиска на панели задач введите Диспетчер устройств, затем нажмите кнопку Открыть.

Выберите Камеры, а затем щелкните правой кнопкой мыши веб-камеру, с которой возникли проблемы.

Выберите Обновить конфигурацию оборудования, снова выберите веб-камеру и посмотрите, что происходит со своей веб-камерой, в разделе Состояние устройства. Если она не работает должным образом, обратитесь к производителю за дополнительными сведениями.

Установка драйверов, имеющихся на компьютере

Введите Диспетчер устройств в поле поиска на панели задач и нажмите кнопку Открыть.

Выберите Камеры, а затем щелкните правой кнопкой мыши камеру, с которой возникли проблемы.

Нажмите кнопку Обновить драйвер, а затем выберите Автоматический поиск обновленных драйверов.

После завершения установки следуйте инструкциям, а затем нажмите кнопку Закрыть.

Если камера не отображается в диспетчере устройств, см. раздел В Windows 10 не работает камера.

Если предлагаемые варианты не помогли устранить проблему, проверьте страницу «музыка, фотографии и сообщество видео » или » устройства & драйверов » на форуме Windows для решений, обнаруженных другими пользователями для определенных проблем с оборудованием или сообщениями об ошибках.

Если у вашего компьютера есть встроенная или подключенная веб-камера, вы можете использовать приложение «Камера», чтобы делать снимки и записывать видео. Чтобы найти приложение «Камера», нажмите Пуск > Камера.

Выберите любой заголовок ниже. Откроется окно для просмотра дополнительных сведений об использовании камеры или веб-камеры.

После открытия приложения «Камера» нажмите кнопку СТРЕЛКА ВЛЕВО.

Некоторые параметры камеры можно изменить в меню «Параметры», например сделать видимой сетку кадрирования для упрощения создания фотографий или включить информацию о местоположении.

Откройте приложение «Камера».

Проведите по экрану справа налево и выберите элемент Параметры.

Выберите нужные настройки для каждого параметра. Например:

изменить пропорции фотографий или качество видео;

включение или отключение данных о местоположении.

показать или скрыть линии сетки;

включить или отключить стабилизацию видео;

включить или выключить микрофон;

включить или выключить видеолампу.

Изменение действия, которое выполняется при касании экрана.

Если на вашем устройстве несколько камер (например, передняя и задняя), то перед съемкой фотографий или видеозаписей вы можете выбрать нужную.

Откройте приложение «Камера».

Выполните прокрутку от нижнего края экрана к центру, чтобы открыть команды приложения. Если вы пользуетесь мышью, щелкните в приложении правой кнопкой.

Нажмите кнопку Сменить камеру.

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

Вы можете получить такой же эффект, если сделаете снимок, а затем обрежете изображение.

Выполните прокрутку к правому краю экрана или нажмите стрелку влево для просмотра последних фотографий и видео. Повторяйте эти действия до тех пор, пока не найдете фотографию, которую нужно обрезать.

Выполните прокрутку от нижнего края экрана к центру, чтобы открыть команды приложения. Если вы пользуетесь мышью, щелкните в приложении правой кнопкой.

Выберите пункт Обрезать.

Нажмите кнопку Пропорции, а затем выберите один из стандартных вариантов или перетащите границы на изображении, чтобы ограничить нужную часть фотографии.

Нажмите кнопку Применить.

Сохраните обрезанный снимок. Вы можете сохранить изменения исходной фотографии или сохранить копию с изменениями.

Вы можете настроить автоматическую отправку фотографий и видеозаписей, созданных с помощью приложения «Камера», в OneDrive и получать к ним доступ с других устройств. При этом можно выбрать, в каком качестве отправлять фотографии.

Выполните прокрутку от правого края экрана к центру и выберите кнопку Параметры > Изменение параметров компьютера.

Перейдите в OneDrive, а затем в папку Пленка.

Выберите параметры для отправки фотографий и видео.

Если ваш планшет или камера поддерживают добавление информации о местоположении и при съемке могут подключаться к Интернету или сети мобильной связи, то приложение «Камера» может добавить в ваши фотографии информацию о географических широте и долготе.

Откройте приложение «Камера».

Проведите по экрану справа налево и выберите элемент Параметры.

Установите для параметра Сведения о местоположении значение Вкл.

Отключение камеры для приложений

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

Выполните прокрутку от правого края экрана, выберите Параметры > Изменение параметров компьютера.

Выберите пункты Конфиденциальность > Веб-камера.

Установите для параметра Разрешить приложениям использовать веб-камеру значение Выкл. или отключите камеру для определенных приложений.

Выполните прокрутку от правого края экрана и выберите Поиск.

В поле поиска введите Диспетчер устройств.

Выберите Диспетчер устройств.

Разверните вкладку Устройства обработки изображений.

Щелкните правой кнопкой мыши элемент «Камера», а затем выберите Отключить.

Отключение использования камеры на заблокированном компьютере

Проведите пальцем от правого края экрана к центру и выберите кнопку Параметры > Изменение параметров компьютера.

Выберите пункт Компьютер и устройства, а затем — Экран блокировки.

Выключите параметр Открывать камеру при прокрутке вниз на экране блокировки.

Примечание: Чтобы приложение «Камера» не могло использовать камеру, ее необходимо полностью отключить. Перетащите приложение в нижнюю часть экрана и удерживайте, пока оно не перевернется.

Если у вас возникли проблемы с приложением камеры после изменения параметров конфиденциальности, закройте и снова откройте его.

Если вы подключили камеру к компьютеру и она перестала работать, выполните следующие действия.

Отключите камеру от компьютера, а затем снова подключите ее.

Закройте приложение. Перетащите приложение в нижнюю часть экрана и удерживайте, пока оно не перевернется.

Если это не помогает, возможно, проблема связана с драйверами камеры. Вы можете установить обновления драйверов, предоставляемые производителем камеры, или использовать стандартные драйверы компьютера.

Установка обновлений от производителя.

Выполните прокрутку от правого края экрана и коснитесь кнопки Поиск. (Если вы используете мышь, переместите указатель в правый нижний угол экрана, потом вверх, а затем щелкните Поиск.) В поле поиска введите Диспетчер устройств, выберите пункт Параметры, а затем пункт Диспетчер устройств в результатах поиска.

Разверните вкладку Устройства обработки изображений.

Правой кнопкой мыши щелкните камеру, с которой возникают проблемы, и выберите пункт Обновить драйверы.

Нажмите Автоматический поиск обновленных драйверов и следуйте инструкциям на экране. Возможно, потребуется перезагрузка компьютера.

Установка драйверов, имеющихся на компьютере

Выполните прокрутку от правого края экрана и нажмите кнопку Поиск. (Если вы используете мышь, переместите указатель в правый нижний угол экрана, потом вверх, а затем щелкните Поиск.) В поле поиска введите Диспетчер устройств, выберите пункт Параметры, а затем пункт Диспетчер устройств в результатах поиска.

Разверните вкладку Устройства обработки изображений.

Правой кнопкой мыши щелкните камеру, с которой возникают проблемы, и выберите пункт Обновить драйверы.

Выберите элемент Выполнить поиск драйверов на этом компьютере.

Выберите элемент Выбрать драйвер из списка уже установленных драйверов.

Выберите USB-видеоустройство, нажмите Далее и следуйте инструкциям на экране. Возможно, потребуется перезагрузка компьютера.

Если предлагаемые варианты не помогли устранить проблему, проверьте страницу «музыка, фотографии и сообщество видео » или » устройства & драйверов » на форуме Windows для решений, обнаруженных другими пользователями для определенных проблем с оборудованием или сообщениями об ошибках.

Источник

Оцените статью