lock&_lock Ответов: 1

Проблема в настройке QT для интеграции с opencv в ubuntu с помощью cmake


Привет, я следил за учебником OpenCV из книги. До этого у меня уже был установлен OpenCV на моей машине. Я работаю с OpenCV &C++ на терминале и компилирую свою программу с помощью CMake. Вот моя версия Ubuntu OpenCV :
Ubuntu 18.04.4 LTS
OpenCV version : 4.2.0

В книге всякий раз, когда они используют imshow(), он показывает окно с панелью инструментов и строкой состояния на нем, мой нет. И позже, в следующих главах, они все еще используют эту панель инструментов для многих целей.

Что я уже пробовал:

После некоторого поиска я обнаружил, что он использует графический интерфейс Qt. Итак, я приступил к установке Qt, используя следующие коды :
sudo apt-get install qtcreator
sudo apt-get install qt5-default

Я также следил за установку приложения Qt Wiki Когда я проверил свою версию Qt, вот что я получил :
$ qmake --version                                                                  
QMake version 3.1
Using Qt version 5.9.5 in /usr/lib/x86_64-linux-gnu

Итак, теперь у меня есть Qt, установленный в моей машине, но как мне интегрировать его с моим OpenCV, чтобы я мог использовать его в своих программах, кроме как поставить `highgui` lib ? Я столкнулся с этой ошибкой :
The library is compiled without QT support in function

Я искал в интернете, но до сих пор не знаю, как это сделать. Нужно ли мне полностью удалить OpenCV и снова скомпилировать его с помощью QT с помощью CMake ?

ОБНОВЛЕНИЕ

Очевидно, не было другого способа, кроме как полностью удалить OpenCV, а затем скомпилировать и переустановить его с помощью QT. Вот что я делаю :

1. Удалите OpenCV (уже переустановленный 3 раза)
sudo apt-get purge '*opencv*'
sudo find / -name "*opencv*" -exec rm -rf {} \;

2. Клонирование в формате OpenCV OpenCV и ВНО с GitHub, и во время сборки с CMake в терминал положить WITH_QT = ON вот полная настройка, которую я использовал :
cmake -D CMAKE_BUILD_TYPE=RELEASE \
        -D CMAKE_INSTALL_PREFIX=/usr/local \
        -D INSTALL_C_EXAMPLES=ON \
        -D INSTALL_PYTHON_EXAMPLES=ON \
        -D OPENCV_GENERATE_PKGCONFIG=ON \ 
        -D WITH_TBB=ON \ 
        -D WITH_V4L=ON \ 
        -D WITH_QT=ON \ 
        -D WITH_OPENGL=ON \
        -D OPENCV_EXTRA_MODULES_PATH=~/opencv_build/opencv_contrib/modules \
        -D BUILD_EXAMPLES=ON ..

Никаких проблем, и я правильно установил OpenCV (протестирован с запуском нескольких программ). А вот и версия :
pkg-config --modversion opencv 
4.2.0

Я тоже наткнулся на этот вопрос Интеграция OpenCV с Qt, но все равно никакого решения нет. Но почему я все еще получаю ошибку в любом проекте С QT на нем (у меня есть QT_RADIOBOX на моей функции createButton), даже после того, как я полностью переустановлю, соберу и сделаю OpenCV с помощью WITH_QT=ON ? Неужели CMake не удалось найти QT ?
terminate called after throwing an instance of 'cv::Exception'
what():  OpenCV(4.2.0-dev) /home/raisa/opencv_build/opencv/modules/highgui/src/window.cpp:597:error: (-213:The function/feature is not implemented)
The library is compiled without QT support in function 'createButton'

[2]    10467 abort (core dumped)  ./exerc13


Вот создать :
//Create buttons
createButton("Blur",  blurCallback,  NULL, QT_CHECKBOX, 0);
createButton("Grey",  greyCallback,  NULL, QT_RADIOBOX, 0);
createButton("RGB",   bgrCallback,   NULL, QT_RADIOBOX, 1);
createButton("Sobel", sobelCallback, NULL, QT_PUSH_BUTTON, 0);
Что посоветуете ?

Обновление [2]

Я читал о явном определении пути для интеграции Qt вместо того, чтобы просто ставить "WITH_QT=ОПоэтому я решил пойти с cmake-gui и определил каждый путь для конфигурации пути Qt. Подобный этому :
WITH_QT=ON (checked in cmake-gui)
    Qt5Concurrent_DIR = /home/raisa/Qt5.9.9/5.9.9/gcc_64/lib/cmake/Qt5Concurrent
    Qt5Core_DIR = /home/raisa/Qt5.9.9/5.9.9/gcc_64/lib/cmake/Qt5Core
    Qt5Gui_DIR  = /home/raisa/Qt5.9.9/5.9.9/gcc_64/lib/cmake/Qt5Gui
    Qt5OpenGL_DIR = /home/raisa/Qt5.9.9/5.9.9/gcc_64/lib/cmake/Qt5OpenGL
    Qt5Test_DIR  = /home/raisa/Qt5.9.9/5.9.9/gcc_64/lib/cmake/Qt5Test
    Qt5Widgets_DIR = /home/raisa/Qt5.9.9/5.9.9/gcc_64/lib/cmake/Qt5Widgets
    Qt5_DIR = /home/raisa/Qt5.9.9/5.9.9/gcc_64/lib/cmake/Qt5
(Установка Qt following installation docs from Установка Qt для Ubuntu)

Опять же, OpenCV был установлен идеально. Проверено путем запуска простых программ. Но все равно сталкиваюсь с той же ошибкой для Qt. Совет ?

Richard MacCutchan

Где же остальная часть сообщения об ошибке? Он должен дать имя функции, а также исходный файл и номер строки.

lock&_lock

Обновлено !

Richard MacCutchan

Я погуглил это сообщение, но не могу найти окончательного ответа. Похоже, что вы не одиноки в этом. Вы можете попробовать веб-сайты openCV или QT, чтобы увидеть, сможете ли вы получить более быстрый ответ там.

Richard MacCutchan

Я быстро просмотрел некоторые источники на github. Похоже, что рад, источником проверки для определения тега HAVE_QT и нет WITH_QT Если он не определен, то вы получите ошибку, которую видите.

Посмотрите, можете ли вы узнать, где этот тег определен (если он вообще существует) либо в исходном файле, либо в файле CMake.

lock&_lock

Спасибо снова. Да, я все время пробовал форум OpenCV. На самом деле это не самый отзывчивый форум. А что касается WITH_QT, то это один из многих вариантов флага для сборки OpenCV с CMake. Я проверю больше, если мне нужно будет где-то определить HAVE_QT. Спасибо

1 Ответов

Рейтинг:
7

lock&_lock

Мне потребовалось почти 2 недели, чтобы попытаться интегрировать QT и OpenGL. Я изменил свои настройки CMake назад и вперед, так что я не совсем уверен, будет ли это один и тот же случай для всех, но это то, что сработало для меня. Убедитесь, что в вашей среде установлена и правильно настроена Java.

У меня установлена Java (проверено с помощью running java &усилитель; javac), но почему-то CMake не смог найти его в конфигурации, поэтому я решил, что сделал чистую деинсталляцию Java и переустановил ее. Я хотел бы начать с чистого env, поэтому я очищаю все заранее (Java, QT, OpenCV, OpenGL) и fonfigure CMake снова с QT и OpenGL, и это сработало отлично.

1. Очистите удаление OpenCV. Воспользуйся uninstall если вы настраиваете OpenCV с помощью CMake или просто делаете это с помощью purge.

sudo apt-get purge '*opencv*'
sudo find / -name "*opencv*" -exec rm -rf {} \;

2. загрузите последнюю версию OpenCV с сайта официальный сайт OpenCV (теперь это версия 4.2.0).
3. Очистите все QT и OpenGL и переустановите их снова. Вот такой очень хороший список всех пакетов разработки Qt5, доступных на Ubuntu, так что вы знаете, что вам нужно установить.
4. Если у вас установлена Java, сначала очистите все деинсталлируйте. Вот такой очень хороший пост о том, как это сделать- Я положу его сюда. (В этой части будет много продувок, убедитесь, что Вы читаете и понимаете, что удаляете) :

Удалите все связанные с Java пакеты (Sun, Oracle, OpenJDK, IcedTea plugins, GIJ):
dpkg-query -W -f='${binary:Package}\n' | grep -E -e '^(ia32-)?(sun|oracle)-java' -e '^openjdk-' -e '^icedtea' -e '^(default|gcj)-j(re|dk)' -e '^gcj-(.*)-j(re|dk)' -e '^java-common' | xargs sudo apt-get -y remove
sudo apt-get -y autoremove

Очистка конфигурационных файлов (осторожно. Эта команда удалила файлы конфигурации libsgutils2-2 и virtualbox):
dpkg -l | grep ^rc | awk '{print($2)}' | xargs sudo apt-get -y purge

Удалить каталог конфигурации Java и кэша:
sudo bash -c 'ls -d /home/*/.java' | xargs sudo rm -rf

Удалить установленные вручную виртуальные машины:
sudo rm -rf /usr/lib/jvm/*

Удалите записи Java, если они все еще есть, из альтернативных вариантов:
for g in ControlPanel java java_vm javaws jcontrol jexec keytool mozilla-javaplugin.so orbd pack200 policytool rmid rmiregistry servertool tnameserv unpack200 appletviewer apt extcheck HtmlConverter idlj jar jarsigner javac javadoc javah javap jconsole jdb jhat jinfo jmap jps jrunscript jsadebugd jstack jstat jstatd native2ascii rmic schemagen serialver wsgen wsimport xjc xulrunner-1.9-javaplugin.so; do sudo update-alternatives --remove-all $g; done

Поиск возможных оставшихся каталогов Java:
sudo updatedb
sudo locate -b '\pack200'

Если приведенная выше команда производит какой-либо вывод, например /path/to/jre1.6.0_34/bin/pack200 удалите каталог, который является родительским для bin, например так: sudo rm -rf /path/to/jre1.6.0_34.

5. Переустановить Java, я использовал одну из Оракул (теперь это версия 14). Загрузите файл и установите его с помощью sudo dpkg -i.
6. Установка Муравья Apache из Центра программного обеспечения Ubuntu.
7. Создать файл в etc/profile.d.
sudo nano /etc/profile.d/(yourjdkversion).sh

и поместите эти строки (проверьте правильность вашей версии jdk, прежде чем поместить ее сюда)
export JAVA_HOME="/usr/lib/jvm/jdk-14"
export PATH="$PATH:${JAVA_HOME}/bin"

Запускай это java -version и ant-version, если возвращать правильные значения, то они настроены правильно, и вы готовы. Мой :
java -version                                                                    
java version "14" 2020-03-17
Java(TM) SE Runtime Environment (build 14+36-1461)
Java HotSpot(TM) 64-Bit Server VM (build 14+36-1461, mixed mode, sharing)

ant -version                                                                      
Apache Ant(TM) version 1.10.7 compiled on September 1 2019


8. Установка cmake-gui Откройте его, поместите исходный код OpenCV и каталог сборки.
9. Настроить
10. Ищите вариант WITH_QT, WITH_OPENGL, и BUILD_JAVA, а затем отметьте их все. НЕТ НЕОБХОДИМОСТИ МЕНЯТЬ КАКОЙ-ЛИБО ПУТЬ- CMake найдет его , если он там есть. Настройте снова.

Вот моя последняя настройка после конфигурации для справки, обратите внимание, что CMAKE нашел QT, OpenGL (в графическом интерфейсе) и JAVA (последние строки) правильно. Полная конфигурация для справки находится здесь (gist) Раньше Java была в недоступном разделе, но теперь CMake нашел ее правильно. Если в вашей конфигурации отсутствует один из них, попробуйте установить то, что отсутствует. Мой :

OpenCV modules:
    To be built:                 calib3d core dnn features2d flann gapi highgui imgcodecs imgproc java ml objdetect photo python2 python3 stitching ts video videoio
    Disabled:                    world
    Disabled by dependency:      -
    Unavailable:                 js ( --> Java used to be here, "unavailable" even though it's installed.)
    Applications:                tests perf_tests examples apps
    Documentation:               NO
    Non-free algorithms:         YES

  GUI: 
    QT:                          YES (ver 5.9.5)
      QT OpenGL support:         YES (Qt5::OpenGL 5.9.5)
    GTK+:                        NO
    OpenGL support:              YES (/usr/lib/x86_64-linux-gnu/libGL.so /usr/lib/x86_64-linux-gnu/libGLU.so)
    VTK support:                 YES (ver 6.3.0)


  Java:                          
    ant:                         /snap/bin/ant (ver 1.10.7)
    JNI:                         /usr/lib/jvm/jdk-14/include /usr/lib/jvm/jdk-14/include/linux /usr/lib/jvm/jdk-14/include
    Java wrappers:               YES
    Java tests:                  YES

  Install to:                    /usr/local


11. Если вы внесете какие-либо изменения, обязательно повторите настройку.
12. Создавать.
13. Перейдите в каталог сборки и установки в формате OpenCV как обычно.
make -j8 (check how many threads you can support, I use -j8)
make install

СДЕЛАНО. Запустите одну или две программы OpenCV с QT и OpenGL и посмотрите, работает ли она.