(1)下载虚拟机镜像文件 ubuntu-18.04.6-desktop-amd64.iso,文件太大了,就不共享了
(2)因为已经有大佬有详细教程,这里就不在赘述,安装过程建议参照下面链接
Ubuntu安装
(1)网上也有很多教程安装Qt的,这里也不赘述,给一个下载Qt的链接QT中文下载网址
(2)再给一个我参照的博客链接
(3)安装好之后建议创建一个新项目,直接运行测试一下。
这个才是这篇博客的重点。这里参考了博客:安装OpenCV3.2+OpenCV3.2_contrib
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
sudo 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
mkdir build
cd build
之后执行以下命令,其中
cmake -DOPENCV_EXTRA_MODULES_PATH=/modules
这是我的示例:
cmake -DOPENCV_EXTRA_MODULES_PATH=/home/orange/usr/local/opencv_contrib-3.2.0/modules /home/orange/usr/local/opencv-3.2.0
在当前目录执行
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库已经搞好了。
因为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
这里参考的是博客:Ubuntu+QT+Opencv环境搭建
在Qt中创建一个测试程序。
下面是我的测试程序,
OpencvForQttest.pro文件,其实就是加了LIB+=那一段,其他的默认就好。
#-------------------------------------------------
#
# Project created by QtCreator 2022-01-04T18:55:26
#
#-------------------------------------------------
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = 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.0
CONFIG += c++11
SOURCES += \
main.cpp \
mainwindow.cpp
HEADERS += \
mainwindow.h
FORMS += \
mainwindow.ui
LIBS+=/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 += target
win32: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_highgui
INCLUDEPATH += $$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
#include
#include
#include
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.zip和opencv_contrib-3.3.0.zip,还有第四部缺少的boostdesc_bgm.i等文件的压缩包。
链接:https://pan.baidu.com/s/1Fhv-wOIrzu3y76Iq1l2EyA
提取码:cf54