Установка и использование OpenCV в Windows

Установка и использование OpenCV в Windows

В прошлый раз мы занимались установкой OpenCV в Linux. Теперь проделаем аналогичную процедуру по установке под Windows. А также создадим простое приложение, использующее модуль OpenCV для работы с веб-камерами:

Установка OpenCV под Windows

Подготовительные действия:

  1. Устанавливаем Git;
  2. Устанавливаем MinGW. Я установил его вместе с пакетом Qt;
  3. Устанавливаем Cmake;
  4. Прописываем пути к bin-каталогам MinGW и Cmake в переменную окружения PATH. По умолчанию Git сам прописывает пути к своим исполняемым файлам, поэтому дополнительные манипуляции с PATH для него не требуются.

Шаг 1: Получаем исходные коды OpenCV из Git

Шаг 2: Подготавливаем OpenCV к сборке

В качестве каталога установки я использую C:\OpenCV\.

Шаг 3: Собираем и устанавливаем OpenCV

Если все прошло без ошибок, то мы можем проверить работоспособность сборки на примере по распознаванию лиц из прошлой статьи. Однако нам потребуется внести пару изменений в pro-файл. Они отражены в следующих строках:

OpenCV: Реализация примера для работы с веб-камерой

Начинаем с pro-файла:

По сравнению с примером чуть выше мы отключили модуль objdetect, но подключили videoio.

Заголовочный файл mainwidget.h:

Обратите внимание, что мы заготовили класс задачи WebCamStreamTask. Именно здесь мы задействуем функции модуля VideoCapture. Главный поток управления с GUI будет всего лишь получать готовые изображения QImage и отображать их в QLabel.

Файл mainwidget.cpp:

Особый интерес для нас представляет следующий фрагмент:

Сначала мы пытаемся открыть веб-камеру по умолчанию. Если что-то пошло не так, то поток прерывает свое выполнение (это не слишком информативно, поэтому никогда не делайте так в настоящем приложении):

Далее мы запускаем бесконечный цикл (он остановится при выходе из приложения или при сбое в работе веб-камеры), в котором получаем кадры от веб-камеры:

Во второй части каждой итерации мы преобразуем полученный кадр (объект класса cv::Mat) в QImage, копию которого затем отправляем с помощью сигнала frameAvailable():

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

Понравилась статья? Поделиться с друзьями:
Добавить комментарий