#visual-c #opencv #dependencies
#visual-c #opencv #зависимости
Вопрос:
При попытке использовать OpenCV для распознавания лиц в Windows мне нужно использовать почти все библиотеки (2d, 3d, ml, gui и т. Д.). В противном случае моя программа не будет запущена. Я не совсем уверен, зачем мне нужен какой-либо графический интерфейс для чего-то столь алгоритмичного, как обнаружение объектов. Какой минимальный набор библиотек требуется и есть ли специальный способ создания OpenCV таким образом, чтобы не было так много зависимостей?
Ответ №1:
Вам нужен opencv_core для получения базовых объектов, таких как cv::Mat, opencv_imgproc для использования пороговых значений, гистограмм и другой предварительной обработки изображений, и opencv_highgui для чтения, записи и отображения изображений, а также для использования видеопотоков с камер и видеофайлов. Это все, что я могу вам сказать, не зная, как запустить OpenCV в Windows, и не зная, какую версию OpenCV вы используете. Насколько я знаю, нет способа создать только некоторые части OpenCV.
Как правило, по моему опыту, вам нужно только добавить библиотеки, связанные с заголовками, которые вы используете. Итак, если у вас возникли проблемы с их отслеживанием, старайтесь избегать использования #include "opencv2/opencv.hpp"
и попробуйте немного более сложный способ #include "opencv2/core/core.hpp"
etc.
Комментарии:
1. Есть ли у вас какой-нибудь пример чтения / записи изображений на диск без использования API в библиотеке highgui? Я хочу использовать остальные API OpenCV, такие как core, 2d и т. Д., Но я не хочу зависеть от библиотеки highgui, поскольку все, что я хочу от этой библиотеки, — это обработка файлов изображений, для которой она использует весь мир Win32 API.
2. Я не понимаю, что Вы написали. Если вы хотите избежать win32 API, то highgui — отличный выбор, потому что он предоставляет единый API для любой системы, на которой вы можете запустить OpenCV. Я использовал только двоичные потоки fstreams для сохранения некоторых данных OpenCV без использования их собственных механизмов, поэтому я не думаю, что есть что показать.
3. Я хочу сказать, что мне не нужен какой-либо графический интерфейс в моем приложении, а использование highgui для чтения / записи изображений без необходимости приводит к нескольким зависимостям Win32, которые мне не нужны в моем приложении.
4. Как сказал Мэтт М. Выше, вы можете использовать какую-либо другую библиотеку для сохранения изображений или использовать fstreams для сохранения объектов в файлах, но это кажется очень неоптимальным способом. Вот ответ, показывающий, как отключить некоторые дочерние библиотеки OpenCV. После краткого ознакомления с текущей версией заголовка OpenCV highgui, похоже, что невозможно включить только часть, отвечающую за чтение и запись изображений.
Ответ №2:
Да, вы можете создать OpenCV без определенных функций библиотеки. OpenCV использует CMake, который требует небольшого обучения, если вы его еще не знаете, но вы можете снять галочки с компонентов OpenCV, которые вам не нужны, в конфигурации сборки CMake.
Вы можете обойтись без использования highgui в своем приложении, если вы можете читать изображения с помощью какой-либо другой библиотеки (но не уверены, сможете ли вы создать OpenCV без нее).
Кроме того, вам потребуется #include "opencv2/objdetect/objdetect.hpp"
поддержка каскадных классификаторов Хаара (начиная с OpenCV 2.3.1).