Создание и запуск примера HelloWorld в OpenCV может показаться трудным, особенно когда почти не работает руководство. Если вы некоторое время назад безуспешно пытались построить OpenCV, здесь вы найдете пошаговое руководство по созданию OpenCV 3.X и способ избавься от разочарования.
Здесь мы исправим следующую ошибку, которая возникает при выполнении некоторых программ OpenCV: Это приложение не запускалось, потому что оно не могло найти или загрузить плагин платформы Qt «windows» в «». Переустановка приложения может решить проблему.
#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main( int argc, char** argv )
{
if( argc != 2)
{
cout <<" Usage: display_image ImageToLoadAndDisplay" << endl;
return -1;
}
Mat image;
image = imread(argv[1], IMREAD_COLOR); // Read the file
if( image.empty() ) // Check for invalid input
{
cout << "Could not open or find the image" << std::endl ;
return -1;
}
namedWindow( "Display window", WINDOW_AUTOSIZE ); // Create a window for display.
imshow( "Display window", image ); // Show our image inside it.
waitKey(0); // Wait for a keystroke in the window
return 0;
}
Подготовка окружающей среды
ШАГ 0) Загрузите и установите компилятор C ++, устанавливающий пакеты Visual C ++ для Visual Studio 2017.
ШАГ 1) Загрузите CMake
Не забудьте добавить CMake в PATH во время установки (это не обязательно, но я рекомендую это, возможно, когда-нибудь вам понадобится написать консольные скрипты, использующие CMake). Я буду использовать двоичный дистрибутив CMake для Win32-x86. Скачать отсюда
ШАГ 2) Создайте каталог для загрузки пакета с исходным кодом OpenCV
ШАГ 3) Загрузите исходный код OpenCV из репозитория git.
Сборка QT
ШАГ 4) Загрузите зависимости для сборки и используйте модуль Highgui
В приведенном выше коде hello world мы видим включение для opencv2 / highgui, это модуль OpenCV (как opencv2 / core) действительно полезен для создания окон, отображения изображений (highhui отвечает за cv::namedWindow
, cv::imgRead
методы) в окнах и других полезных графических интерфейсах. Особенности. Этот модуль построен поверх QT, поэтому нам нужно скачать и собрать библиотеку QT.
Перейдите на главную страницу QT, затем щелкните Автономные установщики Qt ›Пакеты исходного кода и другие выпуски› Для пользователей Windows в виде одного zip-файла (626 МБ) .
ШАГ 5) Распакуйте его в красивый каталог с коротким именем, например D:/OpenCV/dep/qt/
ШАГ 6) Запустите командную строку Visual Studio
затем перейдите в извлеченный каталог. В моем случае
$> d:
$> cd D:\opencv-master\dep\qt-everywhere-opensource-src-5.9.1
ШАГ 8) настройте сборку QT
QT имеет много модулей, но для использования OpenCV Highgui нам просто нужно скомпилировать модуль qtbase
, поэтому давайте настроим нашу сборку QT перед компиляцией с использованием Developer Command Prompt for VisualStudio
.
сборка QT может занять пару часов, просто давайте проигнорируем как можно больше, чтобы ускорить сборку
> configure -skip qt3d -skip qtactiveqt -skip qtandroidextras -skip qtcanvas3d -skip qtcharts -skip qtconnectivity -skip qtdatavis3d -skip qtdeclarative -skip qtdoc -skip qtgamepad -skip qtgraphicaleffects -skip qtimageformats -skip qtlocation -skip qtmacextras -skip qtmultimedia -skip qtnetworkauth -skip qtpurchasing -skip qtquickcontrols -skip qtquickcontrols2 -skip qtremoteobjects -skip qtscript -skip qtscxml -skip qtsensors -skip qtserialbus -skip qtserialport -skip qtspeech -skip qtsvg -skip qttools -skip qttranslations -skip qtvirtualkeyboard -skip qtwayland -skip qtwebchannel -skip qtwebengine -skip qtwebsockets -skip qtwebview -skip qtwinextras -skip qtx11extras -skip qtxmlpatterns
ШАГ 9) Выберите редакцию OpenSource QT
Затем примите предложение лицензии, набрав y
, и войдите.
При возникновении ошибки конфигурации: запустите
nmake confclean
и снова запуститеconfigure
.
ШАГ 10) Соберите QT
Введите следующую команду для компиляции модуля qtbase
.
> nmake
ШАГ 11) Установите переменные среды QT
Установите переменную среды с именем QTDIR
, указывающую на вашу извлеченную папку QT.
setx -m QTDIR D:\opencv-master\dep\qt-everywhere-opensource-src-5.9.1
Установите другую переменную среды с именем QT_QPA_PLATFORM_PLUGIN_PATH
pointing в папку qt\qtbase\plugins
.
Когда вы выполняете программу OpenCV, которая использует некоторый метод highgui (namedWindow, showImage) и переменная среды
QT_QPA_PLATFORM_PLUGIN_PATH
не определена, вы получаете сообщение об ошибке: Это приложение не смогло выполнить start, потому что ему не удалось найти или загрузить подключаемый модуль платформы Qt «windows» в «». Эту проблему может решить переустановка приложения.
setx -m QT_QPA_PLATFORM_PLUGIN_PATH D:\opencv-master\dep\qt-everywhere-opensource-src-5.9.1\qtbase\plugins
Если вы не хотите использовать подсказку Visual Studio, вы также можете щелкнуть правой кнопкой мыши мой компьютер ›расширенная конфигурация системы› переменные среды, а в разделе «системные переменные» (не пользовательские переменные) нажмите «Создать» и установите соответствующие имя QTDIR
и QT_QPA_PLATFORM_PLUGIN_PATH
, указывающее на ваш извлеченный каталог QT и папку qtbase plugins.
ШАГ 12) Установите папку qtbase/bin
в path
щелкните правой кнопкой мыши мой компьютер ›расширенная конфигурация системы› переменные среды ›системные переменные› Путь
Сборка OpenCV
ШАГ 13) Настройка CMake для создания решения Visual Studio
Для некоторых пакетов CMake может не найти все необходимые файлы или каталоги. В этом случае CMake выдаст ошибку в своем окне вывода (расположенном в нижней части графического интерфейса пользователя) и установит для своих значений поля NOTFOUND
константы.
А пока давайте проигнорируем это и сосредоточимся на установке флажка Сгруппированы под выбранным двоичным каталогом.
ШАГ 14) Снова настраиваем CMake для сборки решения Visual Studio!
Теперь вы должны увидеть список сгруппированных параметров, как показано ниже.
Ниже приводится базовая конфигурация CMake для генерации основных зависимостей, необходимых в коде hello world.
Также обратите внимание, что следующая конфигурация OpenCV сможет читать только изображения в формате .bmp
.
Отметьте только следующие параметры: То, что здесь не упомянуто, следует снять (просто измените упомянутые группы).
WITH:
WITH_QT
ENABLE:
ENABLE_PRECOMPILED_HEADERS
ENABLE_SOLUTION_FOLDERS
BUILD:
BUILD_opencv_core
BUILD_ZLIB
BUILD_opencv_highgui
BUILD_opencv_imgcodecs
BUILD_opencv_imgproc
Затем перейдите в папку build\vs_15_2017
и откройте OpenCV.sln
, чтобы скомпилировать решение. (извините, мой vs2017 на испанском)
ШАГ 15) Группировка зависимостей вручную
Теперь, когда мы скомпилировали все необходимые модули OpenCV для запуска нашего приложения hello world, давайте поместим все зависимости в уникальный симпатичный каталог.
Я буду использовать C:\Users\user\Dropbox\AdditionalLibraries\OpenCV
, там я создам папку для включений с именем include
и папку для статических библиотек с именем lib
.
В нашу include
вставим следующие папки
D:\opencv-master\build\vs_15_2017\opencv2
D:\opencv-master\include\opencv2
D:\opencv-master\modules\core\include\opencv2
D:\opencv-master\modules\highgui\include\opencv2
D:\opencv-master\modules\imgcodecs\include\opencv2
D:\opencv-master\modules\imgproc\include\opencv2
В нашу lib
папку вставим папку D:\opencv-master\build\vs_15_2017\lib\Debug
.
В нашу папку lib
я создам папку с именем 3rdParty
и вставлю внутри папку, расположенную по адресу: D:\opencv-master\build\vs_15_2017\3rdparty\lib\Debug
Структура папок и файлов должна выглядеть примерно так:
- OpenCV\ // $(OPENCV_DIR)
- include\ // $(OPENCV_DIR)include
- opencv2\
+ core\
+ highgui\
+ imgcodecs\
+ imgproc\
core.hpp
cvconfig.hpp
highgui.hpp
imgcodecs.hpp
imgproc.hpp
opencv.hpp
opencv_modules.hpp
- lib\ // $(OPENCV_DIR)lib
- Debug\ // $(OPENCV_DIR)lib\Debug
opencv_core331d.lib
opencv_core331d.pdb
opencv_highgui331d.lib
opencv_highgui331d.pdb
opencv_imgcodecs331d.lib
opencv_imgcodecs331d.pdb
opencv_imgproc331d.lib
opencv_imgproc331d.pdb
- 3rdParty\
- Debug\ // $(OPENCV_DIR)lib\3rdParty\Debug
zlibd.lib
zlibd.pdb
ШАГ 16) Создайте переменную среды OPENCV_DIR
Теперь давайте расскажем нашему решению Visual Studio, где находятся наши зависимости OpenCV. Рекомендуется создать переменную среды, указывающую на папку, в которой мы сгруппировали нашу библиотеку и включили файлы. в cmd напишите:
> setx -m OPENCV_DIR C:\Users\user\Dropbox\AdditionalLibraries\OpenCV
ШАГ 17) Создайте лист свойств opencv_debug
в VisualStudio
Вы можете включить property manager
переход к View > Other Windows > Property Manager
, а затем создать лист свойств для режима отладки под названием opencv_debug
ШАГ 18) Настройте страницу свойств opencv_debug
Перейдите в каталоги VC ++ и добавьте путь к каталогам OpenCV include
и lib
, используя ранее созданную переменную среды OPENCV_DIR
.
VC++ Directories
Include Directories
$(OPENCV_DIR)include
Library Directories
$(OPENCV_DIR)lib\Debug
$(OPENCV_DIR)lib\3rdParty\Debug
$(QTDIR)\qtbase\lib
Теперь укажите linker
, какие библиотеки могутlink
во время компиляции.
Далее следует точный список библиотек, которые необходимо связать для запуска программы hello world OpenCV.
Вы сможете читать только
.bmp
изображений, для большей функциональности прочтите ШАГ 19.
opencv_core331d.lib
opencv_highgui331d.lib
opencv_imgcodecs331d.lib
opencv_imgproc331d.lib
zlibd.lib
Qt5Cored.lib
Qt5Guid.lib
Qt5Testd.lib
Qt5Widgetsd.lib
ШАГ 19) Больше функциональности
Чтобы получить квази-полную сборку OpenCV, вы можете сгенерировать следующее решение OpenCV:
Скачайте зависимости: и вставьте их в свою opencv/dep
созданную папку. Eigen (Eigen 3.3.4) OpenEXR openexr-2.2.1.tar.gz
Отметьте только следующие параметры: То, что здесь не упомянуто, следует снять (просто измените указанные группы).
WITH:
WITH_1394
WITH_DIRECTX
WITH_DSSHOW
WITH_EIGEN
WITH_GSTREAMER
WITH_IPP
WITH_ITT
WITH_JASPER
WITH_JPEG
WITH_LAPACK
WITH_OPENEXR
WITH_OPENMP
WITH_PNG
WITH_QT
WITH_TIFF
ENABLE:
ENABLE_PRECOMPILED_HEADERS
ENABLE_SOLUTION_FOLDERS
BUILD:
BUILD_IPP_IW
BUILD_ITT
BUILD_JASPER
BUILD_JPEG
BUILD_OPENEXR
BUILD_PNG
BUILD_TIFF
BUILD_ZLIB
BUILD_opencv_apps
BUILD_opencv_calib3d
BUILD_opencv_core
BUILD_opencv_features2d
BUILD_opencv_flann
BUILD_opencv_highgui
BUILD_opencv_imgcodecs
BUILD_opencv_imgproc
BUILD_opencv_ml
BUILD_opencv_objdetect
BUILD_opencv_photo
BUILD_opencv_shape
BUILD_opencv_stitching
BUILD_opencv_superres
BUILD_opencv_ts
BUILD_opencv_video
BUILD_opencv_videoio
BUILD_opencv_videostab
ВЫВОД
Мы изучили, как сделать крошечную и почти полную компиляцию OpenCV для статических библиотек, что позволяет вам контролировать размер конечных двоичных файлов. В будущих руководствах мы должны попытаться установить новый OpenCV 4.x, который включает в себя множество удивительных функций, а также мы узнаем, как напрямую интегрировать программы OpenCV с известными игровыми движками, такими как Unity.
ОБЩИЕ ОШИБКИ:
- У вас установлено несколько Visual Studio: если у вас проблемы с типом.
No CMAKE_C_COMPILER could be found.
No CMAKE_CXX_COMPILER could be found.
И вы уверены, что у вас есть компиляторы c / cpp, тогда вам стоит прочитать этот великолепный ответ на StackOverflow.
В моем случае у меня были установлены Visual Studio 14 2015 и Visual Studio 15 2017, поэтому, когда я изменил генератор CMake с VS2015 на VS2017, проблема была решена.
2. Не могу прочитать данные драйвера Intel ICD OpenGL: Эта ошибка связана с графическими драйверами для встроенной видеокарты, в моем случае мне нужно перейти на более старую версию установленных драйверов.
Мой исходный установленный драйвер был: DELL 21.20.16.4550, Моя встроенная видеокарта - Intel HD Graphics 530.
ДОПОЛНИТЕЛЬНЫЕ УПРАЖНЕНИЯ:
Дайте мне знать ваши ответы и идеи в поле для комментариев.
- Не могли бы вы понять, как создавать библиотеки релизов OpenCV?
- Наша текущая сборка QT может быть достаточной для сборки OpenCV x64?
- Используйте проект INSTALL, чтобы не находить вручную все сгенерированные двоичные файлы и их файлы заголовков.