一文详解OpenCV环境搭建:Ubuntu20.4使用CLion配置OpenCV开发环境

计算机视觉和图像处理领域OpenCV 是一个不可或缺的工具。其为开发者提供了一系列广泛的算法实用工具,支持多种编程语言,并且可以在多个平台上运行。对于希望在其项目中集成先进视觉功能的开发者来说,掌握如何配置和使用OpenCV是非常重要的。本文旨在帮助ubuntu 20.4系统C++开发者快速上手,在CLion集成开发环境配置并使用OpenCV库

一、安装OpenCV

opencv安装有两种方式:

  1. 使用包管理器安装预编译版本(安装十分简单,但是版本只有4.2.0,且没有扩展模块且不支持Qt窗口)
  2. 从源码安装(比较复杂,但是推荐)

1.1 安装预编译版本

bash 复制代码
sudo apt install libopencv-dev python3-opencv

这样就安装完成了。这种安装方法,默认把opencv相关文件放置在系统目录。

1.2 从源码构建安装

1.2.1 安装前准备

首先,需要安装一系列必要的工具和依赖库,包括:

bash 复制代码
sudo apt update                                      		# 更新软件源
sudo apt install build-essential                     		# 安装编译所需的库
sudo apt install g++ cmake pkg-config git make wget unzip   # 安装一些必要的工具
sudo apt install libgtk-3-dev libavcodec-dev libavformat-dev libswscale-dev python3-dev python3-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libtiff5-dev libdc1394-22-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libv4l-dev libxvidcore-dev libx264-dev gfortran openexr libatlas-base-dev libopenexr-dev
1.2.2 下载OpenCV源码

然后,下载OpenCV源码。可以在官网下载相应版本的OpenCV,也可以在GitHub下载:

两种方式都可以,这里我选择的是官网下载:

点击Source进行下载,下载完成后,解压到主目录下,并将解压后的文件重命名为opencv。

1.2.3 建立编译目录

源码解压到主目录后,进入主目录下,执行以下命令语句:

bash 复制代码
cd opencv
mkdir build
cd build

这是为了在源码的根目录下建立一个临时目录,用于存放编译所产生的文件,不至于污染源码,使得你的源码可以根据不同的配置命令分别编译出多份可执行文件,每一份都很清晰,不至于混在一起。

1.2.4 编译安装源码

执行以下命令,编译安装源码:

bash 复制代码
cmake -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=YES -D CMAKE_INSTALL_PREFIX=/usr/local ..
make -j4    			# 4线程并行编译
sudo make install  		# 安装

在第一步中,配置了三个参数:

  • 第一个参数-D CMAKE_BUILD_TYPE=Release:指定构建类型为Release 模式(优化性能,减少调试信息);
  • 第二个参数-D OPENCV_GENERATE_PKGCONFIG=YES:开启生成opencv4.pc文件,从而支持pkg-config功能(pkg-config是一个帮助编译时查找库的工具,通过opencv4.pc文件提供库的路径帮助查找库文件);
  • 第三个参数-D CMAKE_INSTALL_PREFIX=/usr/local:指定安装目录,也可以根据自己的需要自定义修改(不过强烈建议大家不要改 ,就按这个/usr/local目录,不然后面可能会遇到一些麻烦);
  • 第四个参数..:表示从build目录中调用父目录的CMakeLists.txt。

1.3 环境变量

添加配置环境变量。

1.3.1 添加库路径

打开文件进行编辑:

bash 复制代码
sudo vi /etc/ld.so.conf.d/opencv.conf

输入下面的内容,然后保存并退出

bash 复制代码
/usr/local/lib

执行如下命令使得配置的路径生效

bash 复制代码
sudo ldconfig
1.3.2 添加环境变量

打开文件进行编辑:

bash 复制代码
sudo vi /etc/profile

在末尾加入:

bash 复制代码
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

重启,或通过以下命令更新环境变量。

bash 复制代码
source /etc/profile

输入以下命令,查看linux下的opencv安装版本,如果出现下图所示的版本信息,则说明安装成功。

bash 复制代码
pkg-config --modversion opencv 

1.4 测试效果

完成了上述的所有步骤,就已经差不多了,接下来就开始进行验证测试。

进入opencv的源码目录,里面有一个sample/cpp/example_cmake的子目录,里面有一个很简单的例程,我们就用这个例程来进行演示:

bash 复制代码
cd opencv/samples/cpp/example_cmake/
cmake .           # 请注意,这里的cmake后有一个空格,然后是一个点号
make

编译成功后,通过如下命令运行:

bash 复制代码
./opencv_example 

若出现如下窗口,则表明运行成功。

二、创建OpenCV工程

打开Clion工具,新建C++项目,编写以下代码:

CMakeCache.txt

java 复制代码
# 指定CMake最低版本要求,确保使用了至少3.23版本的CMake。  
cmake_minimum_required(VERSION 3.23)  
# 定义项目名称为CLion_OpenCV_Demo,并设置使用的默认语言(如果需要)。  
project(CLion_OpenCV_Demo)  
# 设置C++编译标准为C++14。  
set(CMAKE_CXX_STANDARD 14)  
  
#OpenCV  
# 尝试查找系统中安装的OpenCV库。REQUIRED选项表示如果找不到OpenCV,则停止配置过程并抛出错误。  
find_package(OpenCV REQUIRED)  
# 将OpenCV的头文件目录添加到当前项目的编译指令中,使得源代码可以包含OpenCV的头文件。  
include_directories(${OpenCV_INCLUDE_DIRS})  
# 添加链接器搜索路径,即OpenCV库文件所在的目录。  
link_directories(${OpenCV_LIBRARY_DIRS})  
  
# 定义可执行文件名和它的源文件列表。这里只有一份源文件main.cpp。  
add_executable(CLion_OpenCV_Demo main.cpp)  
  
# 链接目标可执行文件与OpenCV库,使得在链接阶段会将指定的OpenCV库链接到最终的可执行文件中。  
target_link_libraries(CLion_OpenCV_Demo ${OpenCV_LIBS})

main.cpp

java 复制代码
#include <iostream>  
#include <opencv2/opencv.hpp>  
  
using namespace std;  
using namespace cv;  
  
int main() {  
    // 使用imread函数从文件路径加载图像到Mat对象中  
    Mat img = imread("../android.png");  
    // 检查是否成功加载了图像。如果img为空,则表示加载失败。  
    if (img.empty()) {  
        cout << "Error" << endl;  
        return -1;  
    }  
    // 使用imshow函数创建一个窗口,并在其中显示名为"Lena"的图像。  
    imshow("Lena", img);  
  
    // 等待用户按键事件。没有参数时会无限期等待直到任意键被按下。  
    // 这个调用也防止了显示窗口立即关闭。  
    waitKey();  
    return 0;  
}

运行程序,输出如下UI界面,代表CLion运行OpenCV成功。

三、参考

https://blog.csdn.net/weixin_44796670/article/details/115900538

https://blog.csdn.net/Cappuccino_jay/article/details/125220734

https://blog.csdn.net/whitephantom1/article/details/136406214

https://cn.linux-console.net/?p=30019

相关推荐
Dream25123 分钟前
【模型常见评价指标(分类)】
人工智能
中意灬4 小时前
基于CNN+ViT的蔬果图像分类实验
人工智能·分类·cnn
唐天下文化5 小时前
甜心速达智慧潮流精选超市、即时零售新业态,打造可持续发展商业模式
大数据·人工智能·零售
有杨既安然6 小时前
Python自动化办公
开发语言·人工智能·深度学习·机器学习
何似在人间5756 小时前
SpringAI+DeepSeek大模型应用开发——1 AI概述
java·人工智能·spring·springai
科技小E6 小时前
5G时代,视频分析设备平台EasyCVR实现通信基站远程安全便捷管控
大数据·网络·人工智能·音视频·安防监控
keepython6 小时前
【n8n docker 部署的代理问题】解决n8n部署无法访问openai等外国大模型厂商的api
运维·人工智能·docker·容器
訾博ZiBo7 小时前
AI日报 - 2025年4月18日
人工智能
胡萝卜不甜7 小时前
智能语音识别+1.2用SAPI实现文本转语音(100%教会)
人工智能·语音识别
小样vvv7 小时前
【AI】IDEA 集成 AI 工具的背景与意义
java·人工智能·intellij-idea