当前位置: 代码迷 >> 综合 >> 关于配置Ubuntu18.04.6+Qt5.9.8+Opencv3.3.0遇到的一系列问题的记录
  详细解决方案

关于配置Ubuntu18.04.6+Qt5.9.8+Opencv3.3.0遇到的一系列问题的记录

热度:114   发布时间:2023-11-23 06:52:10.0

1.虚拟机Ubuntu18.04.6的安装

(1)下载虚拟机镜像文件 ubuntu-18.04.6-desktop-amd64.iso,文件太大了,就不共享了

(2)因为已经有大佬有详细教程,这里就不在赘述,安装过程建议参照下面链接

Ubuntu安装

2.Qt5.9.8的安装

(1)网上也有很多教程安装Qt的,这里也不赘述,给一个下载Qt的链接QT中文下载网址

(2)再给一个我参照的博客链接

(3)安装好之后建议创建一个新项目,直接运行测试一下。

3.Opencv3.3.0的安装

这个才是这篇博客的重点。这里参考了博客:安装OpenCV3.2+OpenCV3.2_contrib

(1)下载对应的文件opencv-3.3.0.zipopencv_contrib-3.3.0.zip,这个在最后有链接下载

(2)首先下载依赖文件,一次性下载可能会出现问题,所以建议一个一个下载,虽然麻烦,但是可以清晰的知道下载哪个出了问题,我是一次性下载出错了,逐个下载又没有问题,搞不太明白。

sudo apt-get install build-essentialsudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-devsudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-devsudo apt-get update

这一步我遇到的问题是下载依赖包 libjasper-dev 时找不到资源包,报错

Unable to locate package libjasper-dev

解决方案如下:

执行以下命令

sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update

再次下载就可以下载成功了

sudo apt install libjasper1 libjasper-dev

 这一步了参考博客OpenCV安装libjasper-dev依赖包错误:E: Unable to locate package libjasper-dev

(3)依赖包下载完成之后,将第一步下载的两个文件复制到自己想要的路径,我这里放的是/home/orange/usr/local。之后将opencv-3.3.0.zipopencv_contrib-3.3.0.zip解压,解压后进入opencv-3.3.0,执行以下命令

mkdir build
cd build

之后执行以下命令,其中<opencv_contrib>为opencv_contrib-3.3.0的绝对路径,<opencv_source_directory>为opencv-3.3.0的绝对路径。

cmake -DOPENCV_EXTRA_MODULES_PATH=<opencv_contrib>/modules <opencv_source_directory>

这是我的示例:

cmake -DOPENCV_EXTRA_MODULES_PATH=/home/orange/usr/local/opencv_contrib-3.2.0/modules /home/orange/usr/local/opencv-3.2.0

 (4)上述步骤完成后,就是最艰难的一步了

在当前目录执行

make -j4
sudo make install

这里遇到的问题是找不到文件

/home/orange/usr/local/opencv-3.3.0/opencv_contrib-3.3.0/modules/xfeatures2d/include/opencv2/xfeatures2d.hpp:42:10: 
fatal error: /opencv2/xfeatures2d.hpp: No such file or directory#include "/opencv2/xfeatures2d.hpp"^~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.

这里只需要根据报错的路径打开xfeature2d.hpp文件,将其相对路径”/opencv2/xfeatures2d.hpp”改为绝对路径即可(在opencv_contrib-3.3.0里面),这一过程会有多个这种报错,解决方法是一样的。

此外,还有一个问题是关于找不到文件boostdesc_bgm.i的,这个文件确实没有,需要另外下载,在CSDN找了一圈全是收费的,最后我是在这里才找到了免费的。除了这个文件外还有几个文件也是没有的,需要另外下载。本文结尾会有链接。将该文件解压,复制到opencv_contrib-3.3.0/modules/xfeatures2d/src/即可。这里参考了博客对于opencv2/xfeatures2d/cuda.hpp: No such file or directory 类问题的解决方法

make结束后,后面的make install 一帆风顺。完成后在/usr/local/lib目录下看到生成的库文件,如下图,说明opencv库已经搞好了。

 (5)opencv库编译好之后就是配置环境变量了。

因为linux扫描动态库的时候默认只会扫描 /lib 和 /usr/lib ,所以需要把我们编译好的opencv的动态库路径也加到扫描列表,第一种方法比较复杂,第二种比较简单。有些开发板上的精简版内核压根没有ld.so.conf.d目录,所以建议直接用第二种方法,第二种不行再用第一种。但是要小心,这玩意容易玩坏。

第一种方法:

输入如下命令,这里补充一下,本文所有命令建议以管理员身份执行。

sudo vim /etc/ld.so.conf.d/opencv.conf

在打开的文件中添加opencv的动态库路径。例如;

/usr/local/lib

添加完之后保存退出,然后

sudo ldconfig
sudo vim /etc/bash.bashrc

在打开的文件,最后面添加

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig export PKG_CONFIG_PATH

至此,我们的opencv就配置好了。

第二种方法;

这个更简单直接,就是直接在终端用export添加,直接在终端输入命令即可,注意把 /usr/local/lib   改为自己的路径,千万记住打后面的:$LD_LIBRARY_PATH,前面说的容易玩坏就是这个,示例如下:

export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

(6)最后就是验证测试了。

这里参考的是博客:Ubuntu+QT+Opencv环境搭建

在Qt中创建一个测试程序。

下面是我的测试程序,

OpencvForQttest.pro文件,其实就是加了LIB+=那一段,其他的默认就好。

#-------------------------------------------------
#
# Project created by QtCreator 2022-01-04T18:55:26
#
#-------------------------------------------------QT       += core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsTARGET = OpencvForQttest
TEMPLATE = app# The following define makes your compiler emit warnings if you use
# any feature of Qt which has been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0CONFIG += c++11SOURCES += \main.cpp \mainwindow.cppHEADERS += \mainwindow.hFORMS += \mainwindow.uiLIBS+=/usr/local/lib/libopencv_highgui.so\/usr/local/lib/libopencv_core.so\/usr/local/lib/libopencv_imgproc.so\/usr/local/lib/libopencv_imgcodecs.so# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += targetwin32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../../usr/local/lib/release/ -lopencv_highgui
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../../../usr/local/lib/debug/ -lopencv_highgui
else:unix: LIBS += -L$$PWD/../../../../usr/local/lib/ -lopencv_highguiINCLUDEPATH += $$PWD/../../../../usr/local/lib
DEPENDPATH += $$PWD/../../../../usr/local/lib

拖个pushbutton,槽函数内容如下,留意一下,imread函数的参数是图片路径,如果路径出错的话,会阻塞,建议使用绝对路径。

Mat src1 = imread("/home/orange/usr/local/123.png");while(1){imshow("src",src1);cout << "it is ok" << endl;return ;}

记得加头文件

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
using namespace std;
using namespace cv;

最后测试的时候还是遇到了一些问题:

1.error while loading shared libraries: libopencv_highgui.so.3.4: cannot open shared object file

        报这个错的原因就是动态库找不到。这里列举几个原因;

        a).pro项目管理文件里面的路径不对

        b).第五步动态库配置没配好,可以用下面的命令查看自己的路径是否添加进去    

echo $LD_LIBRARY_PATH

2.Gtk-Message: 09:10:26.571: Failed to load module "canberra-gtk-module"

        这是因为之前根本就没有下载这玩意,下载一下就好了,执行以下命令

sudo apt-get install libcanberra-gtk-module

最后,历经艰难险阻,终于是把环境配好了,最后结果如下,点击pushbutton,就会弹出图片:

 还有最后的文件链接,包含opencv-3.3.0.zipopencv_contrib-3.3.0.zip,还有第四部缺少的boostdesc_bgm.i等文件的压缩包。

链接:https://pan.baidu.com/s/1Fhv-wOIrzu3y76Iq1l2EyA 
提取码:cf54 

  相关解决方案