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,然后解压到自己的路径是:
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
接下来开始编译工作,编译安装命令如代码清单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的内容如下:
然后保存。
继续第二步。
sudo ldconfig
然后编辑:
sudo gedit /etc/bash.bashrc
在最后面添加内容:
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig export PKG_CONFIG_PATH
如下图:
保存一下然后,调用:
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})
ps:
set(CMAKE_CXX_STANDARD 14)
这段的意思是,cmake用的c++14来进行编译。
然后build以后,在qt creator你会发现---嗯?多了一些东西:
然后,在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; }
执行以后得到结果:
很赞哦! (1024)