3. 实战环境搭建:OpenCV安装、Python环境配置、测试图像数据集准备
说实话,很多同学做算法研究,理论背得滚瓜烂熟,一到动手就卡在环境上。我见过太多人花了两天装OpenCV,结果发现版本不对,白平衡算法跑出来全是花的。这一章,咱们就把地基打牢。
环境搭建这件事,说白了就三步:Python环境、OpenCV库、测试图片。每一步都有坑,我一个个说。
3.1 Python虚拟环境:别偷懒,这一步省不了
我个人习惯,每个项目都建独立的虚拟环境。为什么?你想想看,今天做白平衡用OpenCV 4.5,明天做目标检测用OpenCV 4.8,两个项目依赖打架怎么办?
我推荐用 conda 或者 venv。这里用 conda 举例:
# 创建Python 3.8环境,我给这个环境起名叫awb_lab
conda create -n awb_lab python=3.8
# 激活环境
conda activate awb_lab
# 检查Python版本
python --version
我的建议:Python 3.8 是目前兼容性最好的版本。3.6太老,3.10以上有些旧版OpenCV接口会报warning。3.8稳得很。
激活后,终端前面会出现 (awb_lab) 字样。看到这个,说明环境生效了。嗯,这里要注意:每次打开新终端,都要重新 conda activate,不然你装的包全跑基环境里去了。
3.2 OpenCV安装:版本选对,少走弯路
OpenCV的安装,我踩过最大的坑就是——装成了 opencv-python-headless,结果 cv2.imshow() 弹不出窗口。白平衡算法调试时,你得实时看效果啊,没窗口怎么调?
正确的安装命令:
# 标准版,带GUI支持
pip install opencv-python==4.5.5.64
# 如果需要额外contrib模块(比如高级白平衡算法)
pip install opencv-contrib-python==4.5.5.64
避坑指南:我曾经在服务器上装opencv-python-headless,本地调试时死活显示不了图像。后来才发现,headless版去掉了highgui模块。本地开发请用标准版,部署到无GUI服务器再用headless。
装完后,验证一下:
import cv2
print(cv2.__version__)
# 应该输出:4.5.5
如果报错 No module named 'cv2',八成是pip安装到了别的环境。检查一下当前终端是不是在 awb_lab 环境里。
3.3 测试图像数据集:自己拍不如用现成的
做白平衡算法,你需要三类图片:
- 标准色卡图:用来做ground truth对比
- 不同色温场景图:日光、阴天、白炽灯、荧光灯
- 极端偏色图:比如纯蓝场景、纯红场景,考验算法鲁棒性
我整理了一个小数据集,结构如下:
| 子目录 | 内容 | 数量 | 用途 |
|---|---|---|---|
| color_checker/ | X-Rite ColorChecker 拍摄图 | 5张 | 标准校正评估 |
| indoor/ | 白炽灯、荧光灯场景 | 10张 | 低色温测试 |
| outdoor/ | 晴天、阴天、黄昏 | 10张 | 高色温测试 |
| extreme/ | 纯色背景、夜景、强光源 | 5张 | 边界情况测试 |
你可以从 这里 下载(课程配套资源包里有)。或者自己拍也行,但记住:一定要拍RAW格式,因为JPEG已经做过白平衡了,你拿它做测试,结果不准。
关键点:测试集里必须包含一张带ColorChecker的图。没有标准色卡,你拿什么量化评价算法好坏?凭肉眼吗?不靠谱。
3.4 整体环境结构一览
我把整个项目结构画了张图,你照着搭就行:
3.5 快速验证脚本
环境搭完,跑个脚本验证一下。我习惯写一个最小化测试:
import cv2
import numpy as np
import os
# 1. 检查OpenCV版本
print(f"OpenCV版本: {cv2.__version__}")
# 2. 读取一张测试图
img_path = "dataset/color_checker/DSC_0001.jpg"
if not os.path.exists(img_path):
print(f"错误:找不到图片 {img_path}")
exit()
img = cv2.imread(img_path)
if img is None:
print("错误:图片读取失败,可能是路径或格式问题")
exit()
print(f"图片尺寸: {img.shape}") # (高, 宽, 通道数)
# 3. 显示图片(按任意键关闭)
cv2.imshow("Test Image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
print("环境验证通过!")
我的习惯:每次新建项目,先跑这个脚本。如果报错,立刻修,不要拖到写算法时才发现环境有问题。磨刀不误砍柴工。
3.6 常见问题速查
| 问题 | 原因 | 解决办法 |
|---|---|---|
| ImportError: No module named cv2 | OpenCV没装,或装错环境 | 检查当前环境,重新pip install |
| cv2.imshow() 不显示窗口 | 装了headless版 | 卸载后装 opencv-python |
| cv2.imread() 返回None | 路径不对,或图片损坏 | 用路径,检查文件格式 |
| 图片颜色不对 | OpenCV默认BGR,显示用RGB | 用 cv2.cvtColor(img, cv2.COLOR_BGR2RGB) |