1. OpenCV概述与环境搭建
1.1 OpenCV的前世今生
说起OpenCV,我最早接触它是在2010年。那时候我刚入行做安防项目,老板扔给我一堆摄像头视频流,说「你给我做个运动检测」。我当时就懵了——从零写图像处理算法?那得写到猴年马月去。
后来一个老同事告诉我:「试试OpenCV吧,这东西能救命。」
嗯,他说得没错。
OpenCV全称是Open Source Computer Vision Library,中文叫「开源计算机视觉库」。它诞生于1999年,最初是英特尔的一个研究项目。你想想看,那会儿计算机视觉还属于学术圈的高冷玩意儿,英特尔把它开源出来,说白了就是想让更多人参与进来,加速技术落地。
2000年,第一个公开版本发布。我记得那时候只有C语言接口,用起来挺费劲的。后来到了2009年,OpenCV 2.0发布,引入了C++接口和Python绑定,这下子门槛一下子降下来了。我个人习惯用Python做原型验证,所以那会儿特别兴奋。
2015年,OpenCV 3.0发布,架构大改,模块化做得更好。到了2018年,OpenCV 4.0出来,开始支持深度学习推理。现在最新版本已经到4.9了,功能越来越强大。
我曾经在项目里遇到过一个问题:用OpenCV 3.4写的代码,升级到4.x后有些API变了,编译不过。嗯,这里要注意——版本迁移时一定要看迁移指南,不然会踩坑。
1.2 OpenCV能干什么?
说白了,OpenCV就是一套「让计算机看懂世界」的工具箱。它覆盖了图像处理、视频分析、目标检测、人脸识别、相机标定、三维重建等几乎所有计算机视觉领域。
我挑几个典型的应用领域说说:
安防监控
这是OpenCV最传统的应用场景。我在做智慧园区项目时,就用OpenCV做运动检测、目标跟踪、越界报警。你想想看,一个摄像头对着厂区大门,当有人翻墙时自动报警——这就是OpenCV的拿手好戏。
自动驾驶
虽然现在自动驾驶都用深度学习,但OpenCV依然是底层图像处理的主力。车道线检测、交通标志识别、障碍物检测,这些都需要OpenCV做预处理。我记得有一次做车道线检测项目,用OpenCV的霍夫变换配合透视变换,效果出奇的好。
医疗影像
这个领域我接触不多,但我知道很多医学图像处理软件底层都用了OpenCV。比如CT图像的去噪、增强、分割,OpenCV都有现成的函数。我一个朋友做眼底图像分析,就是用OpenCV做血管提取的。
工业检测
这个我熟。在工厂流水线上,用OpenCV做产品外观缺陷检测,比如划痕、污渍、尺寸偏差。我曾经帮一个电子厂做过PCB板焊点检测,用OpenCV的模板匹配加上形态学操作,准确率能做到98%以上。
1.3 环境搭建——Windows篇
好,理论说完了,咱们来点实际的。环境搭建这块,我建议你按我的步骤来,别自己瞎折腾,不然容易出幺蛾子。
Windows下安装OpenCV
我个人习惯用Python,所以咱们以Python环境为例。
第一步,安装Python。我推荐Python 3.8到3.11之间的版本,太新或太旧都可能遇到兼容性问题。去python.org下载安装包,记得勾选「Add Python to PATH」。
第二步,安装OpenCV。打开命令行,输入:
pip install opencv-python
pip install opencv-contrib-python
第一个是基础包,第二个是扩展包,包含了一些专利算法(比如SIFT、SURF)。我建议两个都装,省得后面缺东西。
pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple
验证安装
装完之后,咱们验证一下。打开Python交互环境,输入:
import cv2
print(cv2.__version__)
如果输出版本号(比如4.9.0),那就说明安装成功了。
我再教你一个更直观的验证方法——读取一张图片并显示:
import cv2
# 读取图片
img = cv2.imread('test.jpg')
# 显示图片
cv2.imshow('Test', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
如果能看到图片窗口弹出来,恭喜你,环境搞定了。
1.4 环境搭建——Linux篇
Linux下安装OpenCV,我推荐用Ubuntu 20.04或22.04。有两种方式:
方式一:apt安装(简单但版本旧)
sudo apt update
sudo apt install python3-opencv
这种方式最省事,但版本可能不是最新的。如果你只是学习用,完全够用。
方式二:源码编译(推荐)
如果你需要最新版本,或者想定制编译选项,那就源码编译。我当年为了在树莓派上跑OpenCV,编译了整整一晚上——嗯,那滋味不好受。
编译步骤大致如下:
# 安装依赖
sudo apt install build-essential cmake git pkg-config
sudo apt install libjpeg-dev libtiff-dev libpng-dev
sudo apt install libavcodec-dev libavformat-dev libswscale-dev
# 下载源码
git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git
# 编译
cd opencv
mkdir build && cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules ..
make -j4
sudo make install
-j4 参数可以加速,4表示用4个核心并行编译。如果你的CPU核心多,可以改成 -j8 或 -j16。
1.5 常见问题与避坑指南
我整理了几个新手最容易遇到的问题:
| 问题 | 原因 | 解决办法 |
|---|---|---|
| import cv2报错 | OpenCV没装好或Python环境不对 | 检查pip list,确认opencv-python在列表中 |
| imread返回None | 路径问题或图片格式不支持 | 用绝对路径,或检查图片是否损坏 |
| 视频打不开 | 缺少解码器 | 安装ffmpeg,或编译时开启WITH_FFMPEG |
| GUI窗口不显示 | Linux下缺少GTK支持 | 安装libgtk2.0-dev后重新编译 |
我曾经在Windows上遇到一个奇葩问题——cv2.imshow窗口一闪而过。后来发现是忘了加waitKey(0)。你想想看,程序执行完直接退出了,窗口当然就关了。加上waitKey让程序等待键盘输入,窗口就能正常显示了。
1.6 本章小结
这一章我们聊了OpenCV的发展史、它能干什么,以及怎么搭建开发环境。说白了,OpenCV就是一个强大的视觉工具箱,你只要会用,就能解决很多实际问题。
环境搭建这块,我建议你Windows下用pip安装,Linux下用apt安装。先跑起来再说,别一上来就搞源码编译——那玩意儿费时费力,等你真正需要定制功能时再搞也不迟。
下一章,咱们开始玩真的——图像的基本操作。到时候我会教你如何用OpenCV读取、显示、保存图片,还会讲一些我在项目中踩过的坑。嗯,敬请期待。