если посмотреть класс _InputOutputArray, то там есть такие конструктор
_InputOutputArray(Mat& m);
если посмотреть класс _InputArray, то там есть такой конструктор
_InputArray(const double& val);
то есть кот (в самом верху) является верным и должен компилироваться. но так как он не компилируется, то я так подозреваю, что установлены неправильные настройки компилятора. я попытался включить компилятор 17
QMAKE_CXXFLAGS += -std=c++17
но это не помогло.
есть какие идеи, что можно сделать?
Здравствуйте, zverjuga, Вы писали:
Z>компилятор выдает ошибку Z>
Z>undefined reference to `cv::randu(cv::_InputOutputArray const&, cv::_InputArray const&, cv::_InputArray const&)
Z>
Z>есть какие идеи, что можно сделать?
В нормальном GNU/Linux, если у тебя установлен пакет разработчика для opencv, то добавить в файл проекта *.pro ссылку на библиотеку в которой находится cv::randu.
LIBS += -lopencv_core
И так для каждой библиотеки, плюс если используется собственная сборка, то ещё добавить пути.
Здравствуйте, zverjuga, Вы писали:
Z>есть какие идеи, что можно сделать?
velkin уже всё написал. Вдогонку порекомендую использовать CMake, с ним проще. Благо сами qt'шники уже отказались от дальнейшей поддержки как qmake, так и qbs.
Здравствуйте, velkin, Вы писали:
V>В нормальном GNU/Linux, если у тебя установлен пакет разработчика для opencv, то добавить в файл проекта *.pro ссылку на библиотеку в которой находится cv::randu.
Здравствуйте, Nuzhny, Вы писали:
N>velkin уже всё написал. Вдогонку порекомендую использовать CMake, с ним проще. Благо сами qt'шники уже отказались от дальнейшей поддержки как qmake, так и qbs.
CMake использовался для того, чтобы отконфигурировать исходники OpencCV. дальше библиотеки компилировались при помощи Visual Studio 2019.
меня вот один момент смущает, что QT Creator используетя конфигурацию WinGW x86, а студия компилируетс своим компилятором. может это как то влияет?
Здравствуйте, zverjuga, Вы писали:
Z>CMake использовался для того, чтобы отконфигурировать исходники OpencCV. дальше библиотеки компилировались при помощи Visual Studio 2019. Z>меня вот один момент смущает, что QT Creator используетя конфигурацию WinGW x86, а студия компилируетс своим компилятором. может это как то влияет?
Влияет, но вряд ли на эту ошибку. Вообще, надо собирать одним компилятором, потому что тут C++ API, ошибки легко могут полезть в процессе работы.
Мой совет остаётся прежним: выкидывай qmake и pro, используй CMake и собирай всё одним компилятором.
Здравствуйте, zverjuga, Вы писали:
Z>Здравствуйте, velkin, Вы писали:
V>>В нормальном GNU/Linux, если у тебя установлен пакет разработчика для opencv, то добавить в файл проекта *.pro ссылку на библиотеку в которой находится cv::randu. Z>все библиотеки откомпилированы и установлены
Что у тебя ссылка на source. Не знаю как там всё это в винде скомпилировалось, потому могу только делать предположения, но в первую очередь посмотрел бы внутрь папки build и поискал там include. Когда-то давным давно во времена ещё второй версии opencv в *.cpp после изменения *.pro файла делал вот такие включения не пытаясь сокращать путь до *.hpp:
#include <opencv2/imgproc/imgproc.hpp>
У тебя винда, версия opencv уже 4.11, надо заново всё смотреть, чтобы сказать что-то точно. Просто по мне как-то некрасиво ссылаться на source, когда уже всё собрано, как-то это всё подозрительно.
Но проблема у тебя undefined reference, то есть ссылка не определена, не найдена.
Z>LIBS += -LE:/opencv/build/lib/Debug/ \ Z> -lopencv_core411d \ Z> -lopencv_imgcodecs411d \ Z> -lopencv_highgui411d \ Z> -lopencv_imgproc411d Z>[/ccode] Z>и сдается мне, что это не ошибка линкера, а ошибка компилятора
Или вот такие определения -lopencv_core411d, то есть файл называется как-то так opencv_core411d.dll? Для MinGW наверное что-то вроде opencv_core411d.so. Получается opencv_core411d, а не opencv_core или opencv_cored. Лично я такие проблемы решаю методом научного тыка.
Z>CMake использовался для того, чтобы отконфигурировать исходники OpencCV. дальше библиотеки компилировались при помощи Visual Studio 2019. Z>меня вот один момент смущает, что QT Creator используетя конфигурацию WinGW x86, а студия компилируетс своим компилятором. может это как то влияет?
MinGW. И вот это зря, в Qt и OpenCV или используй MinGW, или компилятор в Visual Studio. MinGW пытались сделать совместимым, но они же имеют дело с Microsoft, результат непредсказуем, ведь Microsoft то на других плевать, им наоборот хорошо, чтобы ничего не работало.
Потому или бери:
1) Visual Studio вроде у них там насколько помню раньше был nmake и Qt и OpenCV.
или
2) QtCreator с MinGW x86 и Qt и OpenCV.
IDE в отличие от компиляторов, конечно, можно менять, но я бы не рекомендовал. А так уже "сто лет" в винде ничего не делал, но начальных этапах лучше остановись на второй связке QtCreator с MinGW x86, то есть даже лучше в начале избежать MinGW x64, а то там тоже непонятно, что в итоге будет.
1) Возмёшь MinGW, который привязан к QtCreator, посмотришь внутри настроек QtCreator.
2) Потом настроишь компиляцию OpenCV на этот самый MinGW, насколько помню OpenCV использует CMake и скомпилируешь.
3) А дальше попробуешь подключиться к OpenCV ещё раз.
Могу ещё дать такой совет если нужно всего лишь провести опыты, не создавать папку build внутри папки с исходинками opencv, а компилировать прямо в opencv. В итоге билд загрязнит папку с исходниками, но зато с некоторыми библиотеками не обязательно opencv, тот же qt для примера, проще потом работать. Но с другой стороны может даже лучше к такому не привыкать и делать всё сразу нормально.
А вообще советую поставить GNU/Linux, тот же Debian в дуалбут (мультибут). Даже если не ставить библиотеку из репозиториев, возни с компиляцией меньше, чем в винде. У тебя будет один набор компиляторов GCC, в винде они тебе известны как MinGW. Просто есть такое мнение, что Windows для казуалов пользователей, а GNU/Linux для красноглазых пользователей. Но когда дело касается программирования, то как раз GNU/Linux для казуальных программистов, а Windows для красноглазых программистов.
Но по идее у тебя должно получится скомпилировать и подключить библиотеки в винде, главное на начальных этапах не распыляйся на компиляторы и внимательней смотри на результат.
Здравствуйте, velkin, Вы писали:
V>Мне вот это не нравится.
Z>>.pro файл Z>>INCLUDEPATH += e:/opencv/build/ V>Z>INCLUDEPATH += e:/opencv/sources/include/ Z>>INCLUDEPATH += e:/opencv/sources/modules/core/include/ Z>>... Z>>INCLUDEPATH += e:/opencv/sources/modules/videostab/include/
V>Что у тебя ссылка на source. Не знаю как там всё это в винде скомпилировалось, потому могу только делать предположения, но в первую очередь посмотрел бы внутрь папки build и поискал там include. Когда-то давным давно во времена ещё второй версии opencv в *.cpp после изменения *.pro файла делал вот такие включения не пытаясь сокращать путь до *.hpp:
на самом деле это артефакты. сначала я пробовал с версией opencv 4.x, там достаточно одного include, потом скачал версию 3.x, там уже пришлось прописывать все пути, вот они и остались. причина не в них, так как в версии 3.x там как то разбросано по разным местам, пришлось вручную прописывать пути. потом вернулся к версии 4.x, а старые пути не удалил.
V>Или вот такие определения -lopencv_core411d, то есть файл называется как-то так opencv_core411d.dll? Для MinGW наверное что-то вроде opencv_core411d.so. Получается opencv_core411d, а не opencv_core или opencv_cored. Лично я такие проблемы решаю методом научного тыка.
я использую статическу. линковку. для винды это opencv_core411d.lib. такие имена сгенерировал компилятор вижуал студии. а проект для вижуал студии сгенерировать CMake. я уже не стал менять ничего на данном этапе, мне пока что главное запустить, чтобы не было ошибок. потом возможно подредактирую.
V>MinGW. И вот это зря, в Qt и OpenCV или используй MinGW, или компилятор в Visual Studio. MinGW пытались сделать совместимым, но они же имеют дело с Microsoft, результат непредсказуем, ведь Microsoft то на других плевать, им наоборот хорошо, чтобы ничего не работало.
V>Потому или бери: V>1) Visual Studio вроде у них там насколько помню раньше был nmake и Qt и OpenCV. V>или V>2) QtCreator с MinGW x86 и Qt и OpenCV.
когда конфигурировал исходники opencv при помощи CMake, то в качестве компилятора выбрал компилятор студии. пытался отконфигурировать при помощи MinGW, но полезли ошибки, в которых я не стал разбираться. а потом оказалось, что QT Creator почему то не может использовать конфигурацию, в которой используется компилятор студии. а вот конфигурацию с MinGW — пожалуйста. так что да, вероятно проблема тут и зарылась, буду пытаться исправить, чтобы использовать одинаковый компилятор и в студии и в QT. по идее, можно даже и не заморачиваться, можно писать проект в вижуал студии, а не в qt creator. если решение проблемы затянется надолго, то вероятно я так и сделаю.
V>2) Потом настроишь компиляцию OpenCV на этот самый MinGW, насколько помню OpenCV использует CMake и скомпилируешь.
под виндой не совсем так. cmake используется для конфигурирования исходников. при конфигурировании я выбирал компилятор вижуал студии, в итоге получал проект, который запускался в студии и уже там компилировались исходники opencv в библиотеки (статические и динамические)
V>А вообще советую поставить GNU/Linux, тот же Debian в дуалбут (мультибут). Даже если не ставить библиотеку из репозиториев, возни с компиляцией меньше, чем в винде. У тебя будет один набор компиляторов GCC, в винде они тебе известны как MinGW. Просто есть такое мнение, что Windows для казуалов пользователей, а GNU/Linux для красноглазых пользователей. Но когда дело касается программирования, то как раз GNU/Linux для казуальных программистов, а Windows для красноглазых программистов.
Здравствуйте, zverjuga, Вы писали:
Z>QT Creator почему то не может использовать конфигурацию, в которой используется компилятор студии. а вот конфигурацию с MinGW — пожалуйста.
В QtCreator нужно вручную создать конфигурацию, то есть прописать nmake и прочее, по крайне мере это то что помню со старых времён. Когда-то собирал Qt в винде используя компиляторы более старой Visual Studio, так же собирал статически и проводил прочие опыты. Та же тема Как собрать Qt 4.8 статически? (2012.02.06)
, правда тут речь о mingw. Но потом мне лень стало разбираться, смысл компилировать компиляторами Microsoft, когда можно везде использовать GCC (MinGW), тем более в GNU/Linux никакой Visual Studio у меня всё равно нет, а вот QtCreator везде. И плюс GNU/Linux ещё разбаловали, сделали меня казуалом ожидающим, что всё устанавливается и конфигурируется с одной кнопки. А по поводу ошибок в CMake используй CMake GUI на этапе конфигурации, по мне там их проще устранить. Конечно, если хочется запустить всё с помощью компиляторов Microsoft, то это тоже возможно, причём можно использовать как Visual Studio, так и QtCreator, по крайне мере раньше это работало.