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再运行原来的命令

需要一点时间

image-20220813184346686

用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
  • 3
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是在 Ubuntu 20.04 系统中编译安装 OpenCV-Python 的步骤: 1. 安装依赖项 ```bash sudo apt-get update sudo apt-get upgrade sudo apt-get install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev sudo apt-get install python3-dev python3-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev ``` 2. 克隆 OpenCV 仓库 ```bash git clone https://github.com/opencv/opencv.git cd opencv git checkout 4.5.2 ``` 3. 克隆 OpenCV-contrib 仓库(可选) ```bash cd .. git clone https://github.com/opencv/opencv_contrib.git cd opencv_contrib git checkout 4.5.2 ``` 4. 编译 OpenCV ```bash cd ../opencv mkdir build cd build cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \ -D PYTHON_DEFAULT_EXECUTABLE=/usr/bin/python3 \ -D PYTHON3_EXECUTABLE=/usr/bin/python3 \ -D PYTHON3_INCLUDE_DIR=/usr/include/python3.8 \ -D PYTHON3_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.8.so \ -D PYTHON3_NUMPY_INCLUDE_DIRS=/usr/lib/python3/dist-packages/numpy/core/include \ -D BUILD_opencv_python3=YES \ -D BUILD_opencv_python2=NO \ -D BUILD_EXAMPLES=NO \ -D BUILD_TESTS=NO \ -D BUILD_PERF_TESTS=NO .. make -j8 sudo make install sudo ldconfig ``` 其中,`-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules` 参数是为了编译 OpenCV-contrib 模块,如果不需要可以省略。 5. 测试 OpenCV-Python ```bash python3 >>> import cv2 >>> cv2.__version__ ``` 如果输出的版本号是 4.5.2,则说明安装成功。 以上是在 Ubuntu 20.04 系统中编译安装 OpenCV-Python 的步骤,希望能帮助到你。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值