Каков минимальный набор необходимых библиотек для распознавания лиц в OpenCV

#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).