#windows #visual-studio #opencv #cmake
Вопрос:
Я установил OpenCV 4.5.2 с помощью установщика Windows, и когда я заглянул в папку «Приложения», я не смог найти некоторые приложения (create_samples, train_cascade). Итак, я загрузил код и сгенерировал проекты Visual studio с помощью CMake. После того, как я построил все эти проекты, опять же, в папке приложения не было файлов проекта для создания этих приложений. Я также запускаю cmake .
в каталоге приложений, но вышла эта ошибка:
CMake Warning (dev) in CMakeLists.txt:
No project() command is present. The top-level CMakeLists.txt file must
contain a literal, direct call to the project() command. Add a line of
code such as
project(ProjectName)
near the top of the file, but after cmake_minimum_required().
CMake is pretending there is a "project(Project)" command on the first
line.
This warning is for project developers. Use -Wno-dev to suppress it.
CMake Error at CMakeLists.txt:4 (ocv_add_application):
Unknown CMake command "ocv_add_application".
-- Configuring incomplete, errors occurred!
See also "C:/opencv/opencv-master/apps/createsamples/CMakeFiles/CMakeOutput.log".
это тот самый CMakeLists.txt файл, который я запускаю:
file(GLOB SRCS *.cpp)
ocv_add_application(opencv_createsamples
MODULES opencv_core opencv_imgproc opencv_objdetect opencv_imgcodecs opencv_highgui opencv_calib3d opencv_features2d opencv_videoio
SRCS ${SRCS})
Честно говоря, в последний раз я использовал CMake 10 лет назад, и мне бы очень хотелось, чтобы кто-нибудь помог мне в этом разобраться.
Спасибо
стек:
CMake 3.20.3
OpenCV 4.5.2
Python 3.9.5
Visual Studio 16.10.0
Wndows 10
Ответ №1:
Я выяснил, почему это происходит. В opencv 4.5 (я не проверял другие версии) строки в файле cmake, которые генерируют решение для traincascade и создают примеры, явно закомментированы. Это потому, что создание этих приложений приведет к возникновению более 600 ошибок! Будем надеяться, что эта проблема скоро будет устранена.
Ответ №2:
от https://github.com/opencv/opencv/issues/13231
Эти приложения были отключены во время удаления устаревшего C API. Переписать их с помощью C API было невозможно, потому что их слишком легко сломать и трудно протестировать.
Также современные подходы через DNN обеспечивают гораздо лучшие результаты — просто сравните детектор лиц OpenCV с каскадным классификатором и DNN.