2、开发环境搭建:操作系统要求、依赖库安装、编译工具链配置
好,咱们正式开始动手前的第一步——搭环境。
说实话,ISP调试工具链的环境搭建,说难不难,说简单也不简单。我见过不少同事,代码写得挺溜,结果卡在环境配置上折腾一整天。嗯,咱们今天就把这事一次性理清楚。
2.1 操作系统要求
我个人习惯用 Ubuntu 20.04 LTS 或 22.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.3 或 Clang 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图、显示、保存。到时候见。