4. Python环境与依赖库安装

做相机标定,说白了就是跟 Python 和几个关键库打交道。我见过不少新手,代码写好了,结果环境配了一整天——版本冲突、路径不对、库装不上。嗯,这一章咱们就把这事彻底搞定。

4.1 Anaconda:为什么我推荐它

Python 环境管理工具不少,但我个人习惯用 Anaconda。为什么?因为它自带 conda 包管理器,能帮你隔离项目环境。你想想看,做标定用 OpenCV 4.x,做深度学习可能要用 OpenCV 3.x,要是全装在一个环境里,迟早出问题。

核心思路:每个项目一个独立环境,互不干扰。

安装步骤

  1. 去 Anaconda 官网 下载对应系统的安装包(Python 3.9+ 版本)
  2. 安装时勾选 "Add Anaconda to my PATH environment variable"(省事)
  3. 安装完成后打开终端,输入 conda --version 验证

我曾经踩过的坑:Windows 上没勾选 PATH,结果每次都要手动切目录。后来我干脆重装了。建议你一步到位。

4.2 创建标定专用环境

我个人习惯给每个项目建独立环境。这样哪怕某个库升级了,也不会影响其他项目。

# 创建环境,指定 Python 版本
conda create -n camera_calib python=3.9

# 激活环境
conda activate camera_calib

# 验证当前环境
python --version

环境名 camera_calib 你可以随便改,但建议起个有意义的。我见过有人起名叫 test1,三个月后自己都忘了是干嘛的。

4.3 核心依赖库安装

标定脚本依赖五个库:OpenCV、NumPy、Matplotlib、glob、os。其中 glob 和 os 是 Python 标准库,不用装。剩下三个需要手动安装。

库名 用途 安装命令
OpenCV 图像读取、角点检测、标定计算 pip install opencv-python
NumPy 矩阵运算、数组处理 pip install numpy
Matplotlib 可视化标定结果、绘制误差图 pip install matplotlib

小技巧:如果你需要 OpenCV 的 GUI 功能(比如显示图像窗口),装 opencv-python-headless 是不够的,必须装完整版 opencv-python。我在服务器上踩过这个坑,折腾了半天才发现。

一键安装命令

pip install opencv-python numpy matplotlib

装完之后,建议用下面这段代码验证一下:

import cv2
import numpy as np
import matplotlib.pyplot as plt
import glob
import os

print("OpenCV version:", cv2.__version__)
print("NumPy version:", np.__version__)
print("All libraries imported successfully!")

如果没报错,说明环境配好了。如果报 ModuleNotFoundError,多半是没激活环境,或者 pip 装到了别的环境里。

4.4 版本兼容性说明

不同版本的库可能会有兼容性问题。我整理了一张表,方便你对照:

库名 推荐版本 最低版本 备注
Python 3.9 3.7 3.10+ 部分旧版 OpenCV 不兼容
OpenCV 4.8.0 4.5.0 4.x 系列都行,别用 3.x
NumPy 1.24.3 1.21.0 新版 OpenCV 依赖 NumPy
Matplotlib 3.7.1 3.5.0 画图用,版本影响不大

注意:如果你用的是 M1/M2 Mac,装 OpenCV 时可能会遇到 architecure not supported 错误。解决办法是装 conda install -c conda-forge opencv,别用 pip。

4.5 环境验证与常见问题

装完库之后,我建议你跑一个完整的验证脚本。这能提前暴露问题,而不是等到写标定代码时才抓狂。

验证脚本

import cv2
import numpy as np

# 1. 测试图像读取
img = np.zeros((480, 640, 3), dtype=np.uint8)
cv2.imwrite('test.jpg', img)
img_read = cv2.imread('test.jpg')
print("Image read test:", "PASS" if img_read is not None else "FAIL")

# 2. 测试角点检测
gray = np.zeros((480, 640), dtype=np.uint8)
ret, corners = cv2.findChessboardCorners(gray, (9, 6))
print("Chessboard detection test:", "PASS" if ret else "FAIL (expected)")

# 3. 测试矩阵运算
a = np.array([[1, 2], [3, 4]])
b = np.linalg.inv(a)
print("Matrix inversion test:", "PASS")

print("\nAll tests completed!")

常见问题速查

  • ImportError: No module named cv2 → 没装 opencv-python,或者装到了别的环境
  • numpy.core.multiarray failed to import → NumPy 版本不兼容,降级到 1.24.x
  • libGL.so.1: cannot open shared object file → Linux 上缺 OpenGL 库,装 libgl1-mesa-glx
  • qt.qpa.plugin: Could not load the Qt platform plugin → Matplotlib 后端问题,加一行 import matplotlib; matplotlib.use('Agg')

4.6 知识体系总览

下面这张图把本章的核心逻辑串起来了。你可以把它当成一个检查清单:

Python 环境与依赖库安装流程 Anaconda 安装 创建独立环境 (conda create) 安装核心库 (pip install) OpenCV (图像处理) NumPy (矩阵运算) Matplotlib (可视化) 环境验证 (import 测试) ✅ 环境就绪 标准库 glob/os 无需安装

4.7 写在最后

环境配置这事,说白了就是一次性的体力活。但千万别图省事跳过验证步骤。我记得有次帮同事排查问题,他标定结果一直不对,最后发现是 OpenCV 版本太旧,findChessboardCorners 的参数接口都不一样。嗯,这种坑,配好环境就能避免。

现在你的环境已经就绪了。下一件事,就是准备标定板,开始采集数据。