Ubuntu 20.04下搭建C++ & OpenCV 4.6.0 & cmake编译
Posted s弦风w
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ubuntu 20.04下搭建C++ & OpenCV 4.6.0 & cmake编译相关的知识,希望对你有一定的参考价值。
前言:这篇文章记录了我在Ubuntu重新搭建OpenCV,c++环境。后续会补充opencv-python、深度学习、ROS环境配置,使之相互兼容。具体操作和安装包在文章中都有,不同版本的安装过程大同小异。
搭建过程共分为以下几大部分:1. 换国内源;2. 安装依赖项;3. 下载OpenCV源文件;4. 配置、编译、安装OpenCV;5. 配置环境;6. demo测试;7. 简单项目测试;8. 其他
换国内源
这是使用Linux系统的必要操作,自行查询
安装依赖项
安装g++, cmake, make, wget, unzip
sudo apt install -y g++
sudo apt install -y cmake
sudo apt install -y make
sudo apt install -y wget
sudo apt install -y unzip
安装opencv依赖的基本库
sudo apt-get install build-essential libgtk2.0-dev libgtk-3-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev
后续也可以根据需要安装一些可选的库
下载OpenCV源文件
下载源文件
直接在官网上下载源文件(无需翻墙)
点击Source进行下载
解压,重命名
下载完成后,解压到主目录下,重命名为opencv
配置、编译、安装OpenCV
新建build目录
按Ctrl+Alt+T打开终端,进入到opencv目录中,新建并进入目录build
cd opencv
mkdir build
cd build
使用cmake配置opencv
cmake -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=YES ..
说明:-D OPENCV_GENERATE_PKGCONFIG=YES
OpenCV4以上默认不使用pkg-config,该编译选项开启生成opencv4.pc文件,支持pkg-config功能(可以配置其他第三方库,不仅仅opencv第三方库)
这是不添加扩展库的写法,第一次配使用这条命令就可以了
下面给出添加扩展库和已安装anaconda的写法:
添加扩展库写法
sudo cmake -D CMAKE_INSTALL_PREFIX=/usr/local -D CMAKE_BUILD_TYPE=Release -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules ..
已安装anaconda写法
sudo cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_SHARED_LIBS=OFF -D WITH_OPENMP=ON -D ENABLE_PRECOMPILED_HEADERS=OFF ..
说明:如果你想让你的opencv配置有cuda加速、cudnn的功能,在按那文章执行cmake命令时,需要将cmake命令替换掉,请同学们自行搜索
可能出现的问题
问题描述:配置卡在IPPICV: Download: ippicv_2020_lnx_intel64_20191018_general.tgz
问题原因:未知
解决方法:并不是外网的问题,重启终端多次Ctrl+C再运行原来的命令
需要一点时间
用make进行编译
make -j4
说明:-j4中的4指同时使用4个进程,根据自己情况调整此值
可能出现的问题
问题描述:libopencv_imgcodecs.so.4.6.0:报错
问题原因:先安装的anconda,造成了anconda和c++的冲突,导致opencv报错
解决方法:运行命令(注意stringwind换成自己的用户名)
sudo mv /home/stringwind/anaconda3/lib/libtiff.so* ~/temp
sudo cp /lib/x86_64-linux-gnu/libtiff.so.5 /usr/local/lib/libtiff.so.5
把libtiff的so文件移除掉并不影响anconda,启动anconda会重新下回来
用make进行安装
sudo make install
默认安装路径为:
/usr/local/bin - executable files
/usr/local/lib - libraries (.so)
/usr/local/cmake/opencv4 - cmake package
/usr/local/include/opencv4 - headers
/usr/local/share/opencv4 - other files (e.g. trained cascades in XML format)
环境配置
配置pkg-config环境
opencv4.pc文件的默认路径:/usr/local/lib/pkgconfig/opencv4.pc.若此目录下没有,可以使用以下命令搜索 sudo find / -iname opencv4.pc
sudo gedit /etc/profile.d/pkgconfig.sh
可能为空文件,在文件中加入PKG_CONFIG_PATH下面一行代码
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
保存并退出,source激活
source /etc/profile
验证是否成功
pkg-config --libs opencv4
类似信息即表示成功
配置动态库环境
(一般想加第三方库这个是必须操作,或者通过改/etc/bashrc)
打开动态库路径文件(空文件)
sudo gedit /etc/ld.so.conf.d/opencv4.conf
文件末尾加上OpenCV的lib路径,保存退出
/usr/local/lib
使配置的路径生效
sudo ldconfig
demo测试
Ctrl+Alt+T打开新终端,进入到example_cmake目录
cd ~/opencv/samples/cpp/example_cmake
执行以下命令
cmake .
make
./opencv_example
正常来说,应该有摄像头窗口界面;如果没有摄像头,出现“Hello OpenCV“也测试成功
简单项目构建
一个显示图片的C++程序
新建并进入ImageShow目录,在目录下新建main.cpp文件
mkdir ImageShow
cd ImageShow
touch main.cpp
打开main.cpp,输入以下代码
#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
using namespace cv;
using namespace std;
int main(int argc, char** argv )
Mat image;
image = imread( argv[1], 1 );
namedWindow("Display Image", WINDOW_AUTOSIZE );
imshow("Display Image", image);
waitKey(0);
return 0;
终端输入,新建CMakeLists.txt(CMakeLists.txt的编写看一下)
touch CMakeLists.txt
打开CMakeLists.txt,输入
#cmake needs this line
cmake_minimum_required(VERSION 3.1)
#Define project name
project(ImageShow)
#Find OpenCV, you may need to set OpenCV_DIR variable
#to the absolute path to the directory containing OpenCVConfig.cmake file
#via the command line or GUI
find_package(OpenCV REQUIRED)
#Enable C++11
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
#Declare the executable target built from your sources
add_executable(ImageShow main.cpp)
#Link your application with OpenCV libraries
target_link_libraries(ImageShow PRIVATE $OpenCV_LIBS)
从网上下载一张图片,放入文件夹内,重命名为1.png。构建并运行程序
cmake .
make
./ImageShow 1.png
会生成一大堆文件
最终能看到刚刚下载的图片😘
其他
Debug的相关问题
这篇文章没有涉及到Debug调试的相关问题,一般通过GDB调试,配置task.json、launch.json 、c_cpp_properties.json文件或者通过cmake-debug,先按下不表
cmake重新编译的方法
删除build文件夹下的文件CMakeCache.txt,再重新编译
rm CMakeCache.txt
以上是关于Ubuntu 20.04下搭建C++ & OpenCV 4.6.0 & cmake编译的主要内容,如果未能解决你的问题,请参考以下文章
记录ubuntu20.04成功编译安装opencv4 c++环境