繁体   English   中英

使用 CMake 在 Ubuntu 18.04 中设置 QT 和 OpenGL 以与 OpenCV 和 C++ 集成的问题

[英]Problem in Setting up QT and OpenGL to Integrate with OpenCV and C++ in Ubuntu 18.04 using CMake

我一直在关注一本书中的 OpenCV 教程。 在此之前,我的机器上已经安装了 OpenCV。 我正在终端上使用 OpenCV 和 C++,并使用 CMake 编译我的程序。 这是我的 Ubuntu OpenCV 版本:

Ubuntu 18.04.4 LTS
OpenCV version : 4.2.0

书中的结果与我的不同,显然他们正在使用 QT。 在接下来的几章中,他们仍然使用 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 的情况下编译并重新安装它之外,别无他法。 这就是我所做的:

  1. 完全卸载 OpenCV,并通过从 Github 克隆 OpenCV 和 OpenCV contrib 再次重新安装它(已经做了 3 次),并且在终端中使用 CMake 构建 OpenCV 期间,我添加了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

这是createButton

//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);

有什么建议吗?

更新

我阅读了 Qt 集成的显式路径定义,而不是仅仅放置“ WITH_QT=ON ”。 所以我决定使用 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 安装遵循Qt Wiki 的安装文档)

再次,OpenCV 安装完美。 通过运行简单程序进行测试。 但是对于Qt仍然遇到同样的错误。 我也不能让 OpenGL 与 OpenCV 一起工作。 建议 ?

我花了将近 2 周的时间尝试集成 QT 和 OpenGL。 我来回更改了我的 CMake 设置,所以我不确定这是否对每个人都一样,但这对我有用。 确保在您的环境中正确安装和配置了 Java

我已经安装了 Java(通过运行java & javac进行了检查),但不知何故 CMake 在配置中找不到它,所以我想我确实卸载了 Java 并重新安装了它。 我想从干净的环境开始。 所以我事先清除了所有内容( JavaQTOpenCVOpenGL )并使用 QT 和 OpenGL 再次配置 CMake,它运行良好。

  1. 干净卸载 OpenCV。 如果您使用 CMake 配置 OpenCV 或简单地使用purge配置,请使用uninstall

     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 插件、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

    删除手动安装的 JVM:

     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,我使用的是Oracle 的一个(现在是 14 版)。 下载文件并使用sudo dpkg -i安装。

  6. 从 Ubuntu 软件中心安装Apache Ant

  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 -versionant-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_QTWITH_OPENGLBUILD_JAVA ,然后勾选所有选项。 无需更改任何路径,如果它在那里,CMake 会找到它。 重新配置。

    这是我配置后的最新设置以供参考,注意CMAKE找到了QTOpenGL (在 GUI 中)和JAVA (最后CMAKE行)。 供参考的完整配置在这里(要点) Java 曾经在unavailable部分,但 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

完毕。 用 QT 和 OpenGL 运行一两个 OpenCV 程序,看看它是否有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM