【手把手】在WSL2 (Ubuntu 22.04 LTS) 上编译安装OpenCV 4.8并配置VSCode开发环境
1. 为什么选择WSL2OpenCV 4.8组合在计算机视觉开发领域OpenCV一直是开发者首选的工具库。而随着Windows Subsystem for Linux 2WSL2的成熟越来越多的开发者选择在Windows环境下使用Linux开发工具链。这个组合最大的优势在于既能享受Windows系统的易用性又能使用Linux强大的开发环境。我最近在几个实际项目中都采用了WSL2OpenCV 4.8的开发配置实测下来这套环境特别适合需要频繁切换Windows和Linux的开发场景。比如在做图像处理算法开发时我可以在Windows下用熟悉的VSCode编写代码然后在WSL2的Ubuntu环境中编译运行完全不需要双系统切换或者虚拟机。OpenCV 4.8相比之前的版本带来了不少实用改进优化了DNN模块的推理性能新增了ONNX模型支持改进了图像处理算法的实现修复了之前版本的一些bug2. 环境准备与依赖安装2.1 设置WSL2和Ubuntu 22.04 LTS首先确保你的Windows 10/11已经启用了WSL2功能。如果还没安装可以用管理员权限打开PowerShell运行wsl --install -d Ubuntu-22.04安装完成后建议做几个基础配置更新软件源列表sudo apt update sudo apt upgrade -y设置国内镜像源加快下载速度sudo sed -i s//.*archive.ubuntu.com//mirrors.aliyun.comg /etc/apt/sources.list安装基础开发工具sudo apt install -y build-essential git cmake pkg-config2.2 安装OpenCV编译依赖OpenCV的编译依赖比较多我整理了一个完整的安装命令sudo apt install -y libgtk-3-dev \ libavcodec-dev libavformat-dev libswscale-dev \ libv4l-dev libxvidcore-dev libx264-dev \ libjpeg-dev libpng-dev libtiff-dev \ libopenblas-dev libatlas-base-dev \ liblapack-dev gfortran \ python3-dev python3-numpy这里有个小技巧如果你不确定某个依赖是否安装成功可以用apt policy命令检查比如apt policy libgtk-3-dev3. 下载和编译OpenCV 4.83.1 获取OpenCV源码推荐直接从GitHub克隆最新代码mkdir ~/opencv_build cd ~/opencv_build git clone https://github.com/opencv/opencv.git git clone https://github.com/opencv/opencv_contrib.git如果想使用特定版本比如4.8.0可以checkout对应tagcd opencv git checkout 4.8.0 cd ../opencv_contrib git checkout 4.8.03.2 配置和编译创建一个build目录并进入cd ~/opencv_build/opencv mkdir build cd build然后运行cmake配置编译选项。这是我经过多次测试后总结出的优化配置cmake -D CMAKE_BUILD_TYPERELEASE \ -D CMAKE_INSTALL_PREFIX/usr/local \ -D OPENCV_GENERATE_PKGCONFIGON \ -D OPENCV_EXTRA_MODULES_PATH../../opencv_contrib/modules \ -D WITH_GTKON \ -D WITH_FFMPEGON \ -D ENABLE_CXX11ON \ -D BUILD_EXAMPLESOFF \ -D BUILD_opencv_python3ON \ -D BUILD_TESTSOFF \ -D BUILD_PERF_TESTSOFF \ ..配置完成后就可以开始编译了。这里有个性能优化技巧使用-j参数指定并行编译线程数一般是CPU核心数的1.5-2倍make -j$(($(nproc) 1))编译过程可能需要30分钟到1小时取决于你的电脑配置。我曾经在一台低配笔记本上编译花了近2小时所以耐心等待是必要的。编译完成后安装sudo make install sudo ldconfig4. 环境配置与验证4.1 配置环境变量为了让系统能找到OpenCV库需要设置pkg-config路径echo export PKG_CONFIG_PATH$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig ~/.bashrc source ~/.bashrc验证安装是否成功pkg-config --modversion opencv4如果显示4.8.0就说明安装成功了。4.2 测试OpenCV功能创建一个简单的测试程序test_opencv.cpp#include opencv2/opencv.hpp #include iostream int main() { std::cout OpenCV version: CV_VERSION std::endl; cv::Mat image cv::Mat::zeros(480, 640, CV_8UC3); cv::putText(image, Hello OpenCV 4.8!, cv::Point(50, 240), cv::FONT_HERSHEY_DUPLEX, 1.0, CV_RGB(0, 255, 0), 2); cv::imshow(Test Window, image); cv::waitKey(0); return 0; }编译并运行g test_opencv.cpp -o test_opencv pkg-config --cflags --libs opencv4 ./test_opencv如果能看到一个绿色文字的窗口说明OpenCV已经可以正常工作。5. VSCode开发环境配置5.1 安装VSCode和必要插件在Windows端安装VSCode后需要安装以下插件Remote - WSLC/CCMake ToolsC Intellisense5.2 配置WSL远程开发在VSCode中按CtrlShiftP输入Remote-WSL: New Window这会打开一个连接到WSL的新VSCode窗口在WSL端的VSCode中打开你的项目文件夹5.3 配置C开发环境创建.vscode/c_cpp_properties.json文件{ configurations: [ { name: Linux, includePath: [ ${workspaceFolder}/**, /usr/local/include/opencv4 ], defines: [], compilerPath: /usr/bin/g, cStandard: c17, cppStandard: c17, intelliSenseMode: linux-gcc-x64, configurationProvider: ms-vscode.cmake-tools } ], version: 4 }再创建.vscode/tasks.json用于构建配置{ version: 2.0.0, tasks: [ { label: build with opencv, type: shell, command: g, args: [ -g, ${file}, -o, ${fileDirname}/${fileBasenameNoExtension}, pkg-config, --cflags, --libs, opencv4 ], group: { kind: build, isDefault: true } } ] }5.4 调试配置创建.vscode/launch.json{ version: 0.2.0, configurations: [ { name: Debug OpenCV Program, type: cppdbg, request: launch, program: ${fileDirname}/${fileBasenameNoExtension}, args: [], stopAtEntry: false, cwd: ${workspaceFolder}, environment: [], externalConsole: false, MIMode: gdb, setupCommands: [ { description: Enable pretty-printing for gdb, text: -enable-pretty-printing, ignoreFailures: true } ], preLaunchTask: build with opencv } ] }6. 常见问题解决6.1 图形界面显示问题WSL2默认不支持GUI程序需要安装X Server在Windows端安装VcXsrv启动XLaunch选择Multiple windowsDisplay number设为0在WSL中设置环境变量echo export DISPLAY$(awk /nameserver / {print $2; exit} /etc/resolv.conf 2/dev/null):0 ~/.bashrc echo export LIBGL_ALWAYS_INDIRECT1 ~/.bashrc source ~/.bashrc6.2 摄像头访问问题WSL2目前无法直接访问主机摄像头解决方案使用Windows端的摄像头程序通过TCP/IP传输图像或者使用网络摄像头通过RTSP协议访问6.3 性能优化建议将OpenCV项目文件放在WSL的文件系统中不是Windows挂载的/mnt目录增加WSL的内存限制在%USERPROFILE%\.wslconfig中添加[wsl2] memory8GB swap4GB对于大型项目考虑使用CMake而不是直接g编译这套环境我已经在多个实际项目中验证过从简单的图像处理到复杂的深度学习应用都能很好支持。特别是在算法开发阶段能够快速迭代和调试大大提高了开发效率。