ubuntu配置opencv4+qt creator上面调用opencv且编译运行

前言

参考

https://zhuanlan.zhihu.com/p/87197806

下面是笔记---如果要看原版的话就点击上面的链接。

由于最新版的OpenCV 4.1需要CMake 3.5.1版本,因此需要保证电脑中安装的CMake编译器版本高于3.5.1。可以通过代码清单1-2中的命令安装最新版CMake。

代码清单1-2 安装最新版CMake命令
1.  sudo apt-get update
2.  sudo apt-get upgrade
3.  sudo apt-get install build-essential cmake

其中安装“update”和“upgrade”分别是更新软件源和查看是否有软件需要更新,这两个命令一般用于安装系统后初次下载软件,或者更换源之后执行,可以根据实际情况不输入该命令。安装的“build-essential”是Linux系统中常用的一些编译工具,“cmake”会直接安装最新版CMake编译器。

OpenCV 4.0的使用会需要很多的依赖项,例如图片编码库、视频编码库等。不过这些依赖是针对某些特定的功能,即使某些功能的依赖项没有安装,也不会影响OpenCV 4.1的编译与使用,只是在使用特定功能时会出现问题。因此在不确定某型功能以后会不会用到时,建议将常用的依赖都安装上,可以通过代码清单1-3中的命令进行安装。

代码清单1-3 安装OpenCV依赖
1.  sudo apt-get install libavcodec-dev libavformat-dev  libswscale-dev libv4l-dev libxvidcore-dev  libx264-dev libatlas-base-dev gfortran libgtk2.0-dev libjpeg-dev libpng-dev

如果需要结合Python使用OpenCV 4.1,需要安装Python开发库。如果没有安装,则无法生成Python的链接。Python开发库有Python 2.7和Python 3.5两个版本,如果能确定不使用某一版本,可以不用安装对应版本的开发库,可以通过代码清单1-4中的命令进行安装。

代码清单1-4 安装Python依赖
1.  sudo apt-get install python2.7-dev python3.5-dev

PS:笔者不需要用到python,故没安装这个。

这里

编译和安装OpenCV 4.1

安装完成所有依赖项之后,就可以进行OpenCV 4.2的编译与安装。由于Ubuntu系统中需要通过编译安装OpenCV,

我下载的openCv4.2,然后解压到自己的路径是:

屏幕截图_307.png

屏幕截图_308.png

ls /usr/local/opencv-4.2.0/
代码清单1-5 在OpenCV 4.0文件夹中创建build文件命令
cd /usr/local/opencv-4.2.0/
sudo mkdir build
cd build

屏幕截图_309.png

接下来开始编译工作,编译安装命令如代码清单1-6所示。

代码清单1-6 编译OpenCV命令
1.  sudo cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
2.  sudo make -j4
3.  sudo make install

命令中“CMAKE_BUILD_TYPE”是编译的模式参数,“CMAKE_INSTALL_PREFIX”是安装路径参数。这些参数都可以缺省,但是如果在安装多个版本的OpenCV时,设置不同的安装路径将变得十分有必要。

第一行命令的最后一定不要忘记有一个“..”指令,其含义是告诉编译器将要编译的文件是来自上一层文件夹中的CMakeList.txt文件。

第二行命令是完成最终的编译,“-j4”的意思是启用4个线程同时进行编译,可以根据自己计算机的性能自主选择,例如,启用8个线程“-j8”,只用单线程可以缺省。

之后根据计算机性能不同,将会是一个漫长的等待编译完成的过程。在编译完成后,用代码清单1-6中第3行代码安装OpenCV 4.2。

环境配置

安装OpenCV 4.1之后还需要通过配置环境告诉系统安装的OpenCV 4.1在哪里,按照如下步骤操作即可完成环境配置,所有的命令在代码清单1-7中给出。

首先执行代码清单1-7中第1行命令,可能会打开一个空白的文件,但是无论是否为空白文件,都需要在末尾添加路径“/usr/local/lib”。

这里添加内容与我们编译时设置的路径有关,如果安装路径变化,这里添加的内容也要随之改变。

保存文件并退出后,使用代码清单1-7中第2行命令将配置路径生效。接下来需要配置bash,在终端通过代码清单1-7中第3行命令打开bash.bashrc文件,在打开的文件末尾加上OpenCV 4.1的安装路径,代码如代码清单1-7中第4行和第5行所示。

这里需要重点说明的是,文件路径需要与设置的安装路径相对应。

保存输入内容后,通过代码清单1-7中第6行和第7行命令更新系统的配置环境,最终完成了OpenCV 4.1的安装。

代码清单1-7 Ubuntu系统中配置OpenCV 4.0环境
1.  sudo gedit /etc/ld.so.conf.d/opencv.conf
2.  sudo ldconfig
3.  sudo gedit /etc/bash.bashrc
4.  PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
5.  export PKG_CONFIG_PATH
6.  source /etc/bash.bashrc
7.  sudo updatedb

步骤说明如下:

第一步:编辑opencv.conf的内容如下:

屏幕截图_311.png

然后保存。

继续第二步。

sudo ldconfig

然后编辑:

sudo gedit /etc/bash.bashrc

在最后面添加内容:

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

如下图:

屏幕截图_312.png

保存一下然后,调用:

source /etc/bash.bashrc

使配置生效,最后:

sudo updatedb

验证OpenCV 4.1是否安装成功

ps:参考原作者的实例,这里结合qt creator直接写代码验证。。

第一步:

CMakeLists.txt里面导入OpenCV库[demo如下]:

cmake_minimum_required(VERSION 3.5)
SET(SOURCE_FILES
main.cpp StudentInfo.cpp base001.cpp
)
project(cpp_study_003 LANGUAGES CXX)



## 引入OpenCV end

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

## 引入OpenCV begin
find_package(OpenCV REQUIRED) # 寻找opencv的安装路径
message(STATUS "OpenCV 类库状态")
message(STATUS "    版本号: ${OpenCV_VERSION}")
message(STATUS "    库: ${OpenCV_LIBS}")
message(STATUS "    路径: ${OpenCV_INCLUDE_DIRS}")
# Add OpenCV headers location to your include paths
include_directories(${OpenCV_INCLUDE_DIRS})
add_executable(cpp_study_003 ${SOURCE_FILES})
# Link your application with OpenCV libraries
##注意 cpp_study_003是我的项目名称,你需要改成自己的项目名称
## 还有,target_link_libraries要用在add_executable后面
target_link_libraries(cpp_study_003 ${OpenCV_LIBS})

屏幕截图_316.png

ps:

set(CMAKE_CXX_STANDARD 14)

这段的意思是,cmake用的c++14来进行编译。

然后build以后,在qt creator你会发现---嗯?多了一些东西:

屏幕截图_315.png

然后,在main.cpp上面弄个测试例子,我懒直接抄的opencv自带的例子---在samples文件夹的cpp目录下面,代码如下:

// This file is part of OpenCV project.
// It is subject to the license terms in the LICENSE file found in the top-level directory
// of this distribution and at http://opencv.org/license.html

#include <opencv2/core/utility.hpp>
#include <iostream>

static const std::string keys = "{ b build | | print complete build info }"
                                "{ h help  | | print this help           }";

int main(int argc, const char* argv[])
{
    cv::CommandLineParser parser(argc, argv, keys);
    parser.about("This sample outputs OpenCV version and build configuration.");
    if (parser.has("help"))
    {
        parser.printMessage();
    }
    else if (!parser.check())
    {
        parser.printErrors();
    }
    else if (parser.has("build"))
    {
        std::cout << cv::getBuildInformation() << std::endl;
    }
    else
    {
        std::cout << "Welcome to OpenCV " << CV_VERSION << std::endl;
    }
    return 0;
}

执行以后得到结果:

屏幕截图_317.png

很赞哦! (1024)

发布了401 篇原创文章 · 获赞 256 · 访问量 271万+

猜你喜欢

转载自blog.csdn.net/cdnight/article/details/103924081