2、开发环境搭建:操作系统要求、依赖库安装、编译工具链配置

好,咱们正式开始动手前的第一步——搭环境。

说实话,ISP调试工具链的环境搭建,说难不难,说简单也不简单。我见过不少同事,代码写得挺溜,结果卡在环境配置上折腾一整天。嗯,咱们今天就把这事一次性理清楚。

2.1 操作系统要求

我个人习惯用 Ubuntu 20.04 LTS22.04 LTS。为什么?因为OpenCV、Eigen这些库,在这两个版本上apt直接装,省心。

你想想看,要是用CentOS,光编译libjpeg-turbo就得手动搞半天。当然,如果你非要用Windows,也不是不行——我建议开WSL2,或者直接上Docker。但说真的,做ISP调试,Linux是主流。

推荐配置:

  • Ubuntu 20.04 LTS / 22.04 LTS
  • 内存 ≥ 16GB(我遇到过8GB机器编译OpenCV直接OOM)
  • 磁盘 ≥ 50GB(依赖库+源码+中间文件,吃空间)

注意: 别用Ubuntu 18.04了。它的GCC版本太老,编译C++17代码会报一堆模板错误。我曾经在这上面浪费过一下午。

2.2 依赖库安装

好,接下来装库。咱们按顺序来,别跳步。

2.2.1 OpenCV

OpenCV是ISP调试的核心。图像读入、显示、色彩空间转换,全靠它。

我建议用源码编译,别偷懒用apt装的旧版本。为什么?因为apt版往往不带contrib模块,而ISP调试里经常要用到xphoto、bioinspired这些扩展模块。

# 安装依赖
sudo apt update
sudo apt install build-essential cmake git pkg-config
sudo apt install libjpeg-dev libpng-dev libtiff-dev
sudo apt install libavcodec-dev libavformat-dev libswscale-dev

# 下载OpenCV 4.8.0(我习惯用这个版本,稳定)
git clone https://github.com/opencv/opencv.git
cd opencv && git checkout 4.8.0

# 编译
mkdir build && cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
      -D CMAKE_INSTALL_PREFIX=/usr/local \
      -D WITH_JPEG=ON \
      -D WITH_PNG=ON \
      -D BUILD_EXAMPLES=OFF ..
make -j$(nproc)
sudo make install

小技巧: 编译时加 -j$(nproc) 用满所有核心。我第一次编译时忘了加,单核跑了40分钟……后来才发现。

2.2.2 Eigen

Eigen是线性代数库。ISP里做矩阵运算、颜色校正矩阵(CCM)、白平衡增益计算,都离不开它。

Eigen是纯头文件库,安装很简单:

sudo apt install libeigen3-dev

或者你想用最新版,也可以从官网下载源码,解压后把头文件路径加到CMakeLists.txt里就行。

验证安装:

# 在终端输入
pkg-config --modversion eigen3
# 输出类似 3.4.0 就对了

2.2.3 libjpeg-turbo

这个库很关键。ISP调试里要频繁读写JPEG图像,libjpeg-turbo比标准libjpeg快2-3倍。我做过测试,处理4K图像时,turbo版能省下30%的时间。

sudo apt install libjpeg-turbo8-dev

如果你需要手动编译最新版:

git clone https://github.com/libjpeg-turbo/libjpeg-turbo.git
cd libjpeg-turbo
mkdir build && cd build
cmake -G"Unix Makefiles" ..
make -j$(nproc)
sudo make install

避坑指南: 我曾经同时装了libjpeg和libjpeg-turbo,结果链接时冲突了。建议只保留一个,或者用CMake的 find_package 明确指定路径。

2.2.4 其他常用库

库名 用途 安装命令
yaml-cpp 配置文件解析(ISP参数常用YAML格式) sudo apt install libyaml-cpp-dev
jsoncpp JSON解析(部分工具链用) sudo apt install libjsoncpp-dev
gflags / glog 命令行参数解析和日志 sudo apt install libgflags-dev libgoogle-glog-dev

2.3 编译工具链配置

环境搭好了,接下来配编译工具。说白了,就是让CMake能找到你装的库。

2.3.1 CMake

CMake版本建议 ≥ 3.16。Ubuntu 20.04自带的是3.16,够用。如果你需要新版:

# 安装最新CMake
wget https://github.com/Kitware/CMake/releases/download/v3.27.0/cmake-3.27.0-linux-x86_64.tar.gz
tar -xzf cmake-3.27.0-linux-x86_64.tar.gz
sudo mv cmake-3.27.0-linux-x86_64 /opt/cmake
export PATH=/opt/cmake/bin:$PATH

我个人习惯:export PATH=/opt/cmake/bin:$PATH 写到 ~/.bashrc 里,这样每次打开终端自动生效。

2.3.2 GCC / Clang

ISP代码对性能要求高,我推荐用 GCC 9.3Clang 12 以上。GCC的优化更激进,Clang的错误提示更友好。

# 安装GCC
sudo apt install gcc-9 g++-9

# 安装Clang
sudo apt install clang-12 lld-12

设置默认版本:

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 90
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-9 90

2.3.3 一个完整的CMakeLists.txt示例

好,最后给你看一个我项目里常用的CMake配置。你直接拿去改改就能用:

cmake_minimum_required(VERSION 3.16)
project(ISP_Toolchain VERSION 1.0.0 LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 找依赖库
find_package(OpenCV 4.5 REQUIRED)
find_package(Eigen3 3.3 REQUIRED)
find_package(JPEG REQUIRED)

# 如果你装了libjpeg-turbo,用这个
# find_package(JPEG_Turbo REQUIRED)

# 添加可执行文件
add_executable(isp_demo main.cpp)

# 链接库
target_link_libraries(isp_demo
    ${OpenCV_LIBS}
    Eigen3::Eigen
    ${JPEG_LIBRARIES}
)

# 开启优化
target_compile_options(isp_demo PRIVATE -O3 -march=native)

注意: -march=native 会让编译器针对你的CPU做优化。但如果你要把程序发给别人用,就别加这个——我吃过亏,在别人的老CPU上直接非法指令崩溃。

好了,环境搭建就这些。你按这个流程走一遍,基本不会出问题。下一章咱们开始写第一个ISP调试程序——读RAW图、显示、保存。到时候见。