你有没有想过,怎么用代码给图片批量加水印?怎么自动把一堆模糊的老照片变清晰?怎么让程序自动识别图片里的二维码?这些和图片、视频有关的处理需求,用一个工具就能轻松搞定,那就是OpenCV。

很多零基础同学一听“计算机视觉”、“OpenCV”就觉得肯定很难,需要懂很多复杂算法才能上手。其实完全不是,OpenCV本身就是一个封装好的工具库,哪怕你只会一点Python基础,也能很快跑通第一个程序,做出简单的图像处理效果。今天我们就从零开始,带你一步步入门OpenCV,保证零基础也能看懂。

---

 一、先搞懂:OpenCV到底是什么?它能做什么?

 1. OpenCV的基础概念,一句话说清楚

OpenCV的全称是Open Source Computer Vision Library,翻译过来就是开源计算机视觉库。说白了,它就是一个已经写好很多现成功能的工具包,把图像处理、计算机视觉里常用的操作都给你封装好了,你不用自己从头写复杂的算法,直接调用它的函数就能用。

比如你想读取一张图片、给图片加个滤镜、把图片缩小、识别图片里的边缘、检测图片里的人脸,这些功能OpenCV都已经写好了,你只需要调用一两行代码就能实现,非常方便。它最开始是由Intel公司的工程师开发的,现在已经是全球计算机视觉领域最常用的开源工具了,不管是学生做项目,还是企业做产品,都在用它。

 2. OpenCV的发展,其实走了很多年

OpenCV最早1999年就由Intel发起了,最开始就是想做一个通用的、免费的计算机视觉工具,降低行业的开发门槛。那时候计算机视觉还在传统方法时代,很多功能大家都要自己从头写,OpenCV把这些常用功能整理到一起,一下子就火了。

后来2000年发布了第一个正式版本,之后不断更新,支持了Python、Java、C++各种编程语言,现在最新的版本已经到4.x了,不仅支持传统的图像处理,还能和深度学习结合,调用训练好的深度学习模型做目标检测、图像分割,功能越来越强大。

而且因为它是开源免费的,不管你是个人用来做学习,还是商业用来做产品,都不用花钱,这也是它能普及这么广的重要原因。

 3. 我们能用OpenCV做什么?这些场景天天都能见到

OpenCV的应用场景特别广,我们身边很多你熟悉的功能,背后都可能用到了OpenCV:

- 日常图像处理自动化:比如你有几百张商品图,需要统一裁剪成指定大小、加水印、调整亮度,不用一张张用PS改,用OpenCV写几十行代码就能自动批量处理,几分钟就能搞定。

- 工业检测:工厂里生产产品,用摄像头拍产品照片,OpenCV可以自动检测产品表面有没有划痕、有没有缺件,比人工检测快很多,准确率也高。

- 人脸识别&人脸检测:很多入门的人脸识别项目,最基础的检测步骤就是用OpenCV自带的级联分类器实现的,几行代码就能从图片里把所有人脸框出来。

- 二维码/条形码识别:我们刚才说的扫码支付,最基础的二维码定位和解析,就可以用OpenCV实现。

- 视频分析:比如监控摄像头里检测有没有人员闯入,统计视频里的车流量,都可以用OpenCV做基础的处理。

- 手机APP开发:很多做计算机视觉相关的移动端APP,底层的图像处理部分,也会用到OpenCV。

说白了,只要你需要处理图片或者视频,OpenCV几乎都能帮你搞定基础的工作,不用你自己重复造轮子。

---

 二、零基础第一步:怎么搭建OpenCV的开发环境?

很多零基础同学最头疼的就是环境搭建,其实OpenCV配Python环境特别简单,只需要一步就能装好,我们一步步来,保证你不会出错。

 前提:你需要先有Python环境

如果你还没装Python,先去Python官网(https://www.python.org/)下载最新版的Python,安装的时候一定要记得勾选“Add Python to PATH”这个选项,不然后面装包会出错。装完之后打开命令提示符(Windows)或者终端(Mac/Linux),输入`python --version`,能输出版本号就说明装好了。

 一步安装OpenCV

打开你的命令提示符/终端,直接输入下面这行命令,回车就好:

pip install opencv-python

这个就是OpenCV的Python预编译包,pip会自动帮你下载安装,因为是国外的源,如果下载速度慢,可以换国内的豆瓣源,用下面这个命令:

pip install opencv-python -i https://pypi.doubanio.com/simple/

等命令运行完,没有报错,就说明装好了。我们可以测试一下,还是在命令行里输入`python`,进入Python交互环境,然后输入下面这行代码:

import cv2

print(cv2.__version__)

如果能输出版本号,比如`4.8.0`之类的,就说明你安装成功了,环境已经 ready 了。是不是特别简单?

> 小提示:我们装的`opencv-python`是完整的OpenCV包,包含了所有核心功能,还有额外的贡献模块,如果需要用一些额外的预训练模型,可以再装`opencv-contrib-python`,一般入门学习只装核心包就够了。

---

 三、第一个程序:从读取、显示、保存图片开始,看完就能跑

环境搭好之后,我们先来学最基础的三个操作:读取图片、显示图片、保存图片。这三个是所有图像处理的基础,不管你做什么复杂任务,第一步都得先把图片读进来,最后处理完还要保存出去,我们一个个来,每一步都有可运行的代码,你可以跟着写。

 1. 读取图片:怎么把图片文件读进程序里?

OpenCV读取图片用的是`cv2.imread()`这个函数,用法非常简单。我们先举个例子:

首先你找一张图片,比如叫`test.jpg`,把它放到你写代码的同一个文件夹里,然后写下面这段代码:

import cv2

 读取图片,参数是图片的路径

img = cv2.imread("test.jpg")

 看看图片的尺寸,输出是(高度, 宽度, 通道数)

print(img.shape)

这里给零基础同学解释一下:

- `import cv2`:我们装完OpenCV之后,Python里就用`cv2`这个名字来导入它,约定俗成都是这么写。

- `cv2.imread("test.jpg")`:第一个参数就是图片的文件路径,如果图片和代码在同一个文件夹,直接写名字就可以,不在同一个文件夹就写完整路径,比如`"C:/Users/xxx/Pictures/test.jpg"`。

- 读出来的`img`其实就是一个NumPy数组,之前我们说过,图片对计算机来说就是一堆数字,OpenCV读进来之后直接就转成数组了,`img.shape`会输出三个数:比如`(1080, 1920, 3)`,意思就是这张图片高度1080像素,宽度1920像素,3个颜色通道(就是我们说的RGB)。

> 一个零基础一定要知道的小坑:OpenCV读彩色图片的时候,默认的通道顺序不是我们常用的RGB,而是BGR!也就是说,第一个通道是蓝色,第三个通道是红色,和我们习惯的反过来。这个点很重要,后面我们和其他库(比如Matplotlib)配合显示图片的时候会用到,别记错了。

如果你的图片路径错了,或者图片不存在,`cv2.imread`不会报错,只会返回一个None,所以如果后面运行出错,可以先检查一下图片路径对不对,这是新手最容易犯的错误。

 2. 显示图片:怎么把读进来的图片显示出来?

读进来之后,我们肯定要看看图片对不对,OpenCV用`cv2.imshow()`来显示图片,我们把代码补全:

import cv2

img = cv2.imread("test.jpg")

if img is None:

    print("读取图片失败,请检查文件路径是否正确!")

else:

     显示图片,第一个参数是窗口的名字,第二个参数是要显示的图片数组

    cv2.imshow("我的第一张OpenCV图片", img)

     等待键盘按键,0代表一直等,单位是毫秒

    cv2.waitKey(0)

     销毁所有窗口,不然程序退出了窗口还会卡在那

    cv2.destroyAllWindows()

解释一下这几个函数:

- `cv2.imshow`第一个参数是窗口的标题,你随便起名字就行,第二个参数就是我们读进来的图片数组。

- `cv2.waitKey`这个一定要加!它是用来等待键盘输入的,如果不加,程序运行完就直接退出了,窗口会一闪而过,你根本看不到图片。参数填0就是说,一直等到你按任意键盘按键再往下走。如果你是显示视频,一般填1,就是等1毫秒,继续往下走。

- `cv2.destroyAllWindows()`就是当你按了按键之后,把所有OpenCV创建的窗口关掉,养成习惯,每次显示完都加上,不然会留下很多残留窗口。

你运行这段代码,就能看到你的图片弹出来了,按任意键窗口就会关掉,第一个显示图片的程序就跑通了,是不是特别有成就感?

 3. 保存图片:怎么把处理好的图片存成文件?

很多时候我们处理完图片,需要把结果存成新的文件,OpenCV用`cv2.imwrite()`来保存,用法也很简单:

import cv2

img = cv2.imread("test.jpg")

if img is None:

    print("读取失败!")

else:

     把图片缩小一半,我们后面讲缩放,这里先看保存

    resized_img = cv2.resize(img, (img.shape[1]//2, img.shape[0]//2))

     保存成新的文件,第一个参数是保存路径,第二个是图片数组

    cv2.imwrite("test_small.jpg", resized_img)

    print("图片保存成功!")

运行完之后,你就能在代码所在的文件夹里看到一个新的`test_small.jpg`,就是缩小之后的图片,保存就完成了。`cv2.imwrite`会根据你写的文件后缀名,自动保存成对应的格式,jpg、png、bmp都支持,非常方便。

 我们把三个操作拼起来,完整的示例代码就是这样:

import cv2

 1. 读取图片

image_path = "test.jpg"   替换成你自己的图片路径

img = cv2.imread(image_path)

 检查是否读取成功

if img is None:

    print(f"错误:无法读取图片 {image_path},请检查文件路径是否正确")

else:

     输出图片信息

    height, width, channels = img.shape

    print(f"读取图片成功!图片尺寸:宽{width}px,高{height}px,通道数:{channels}")

     2. 显示原始图片

    cv2.imshow("原始图片", img)

    cv2.waitKey(0)

     这里我们做一个简单处理:把图片转成灰度图

    gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

     显示处理后的灰度图

    cv2.imshow("灰度图效果", gray_img)

    cv2.waitKey(0)

     3. 保存处理后的图片

    save_path = "gray_test.jpg"

    cv2.imwrite(save_path, gray_img)

    print(f"处理后的图片已经保存到 {save_path}")

     关闭所有窗口

    cv2.destroyAllWindows()

你把代码里的`test.jpg`换成你自己的图片路径,直接运行就能出效果:程序会先显示原始图片,按任意键再显示转成灰度后的图片,再按任意键退出,还会把灰度图保存成新文件。整个过程没有复杂的东西,你可以跑一遍感受一下,OpenCV操作图片其实就是这么简单。

---

 四、零基础后续怎么学?给你规划清晰的学习路径

很多同学跑通第一个示例之后,就不知道接下来该学什么了,我给零基础同学规划一个循序渐进的路径,照着走就行,不会走偏:

 第一步:先掌握OpenCV的基础操作(1-2周)

先把常用的基础操作练熟,这些是所有项目的基础,不用上来就啃复杂的算法:

1. 图像的基本操作:读取、显示、保存我们已经会了,接下来学:

   - 颜色空间转换:比如彩色转灰度,BGR转RGB,这个常用。

   - 几何变换:图片缩放、旋转、裁剪、平移,批量处理图片经常用。

   - 画图功能:在图片上画矩形、画圆、画线、写文字,比如目标检测框出物体就要用这个。

   - 像素操作:怎么获取和修改某个位置像素的值,怎么裁剪ROI(感兴趣区域)。

2. 基础图像处理操作:

   - 滤波:去除图片噪声,模糊图片,比如高斯模糊、中值滤波。

   - 边缘检测:提取图片里物体的边缘,Canny边缘检测最常用。

   - 阈值分割:把图片分成前景和背景,比如把黑色文字从白色背景里分离出来。

这些操作都不难,每个操作都是调用一个OpenCV的函数,你可以找一张图片,一个个试过去,看看不同参数出来的效果是什么样的,试一遍就记住了。

 第二步:进阶学习传统计算机视觉操作(2-3周)

基础操作练熟之后,可以学一些传统计算机视觉的常用操作,做一些简单的小项目:

1. 特征提取:学习哈里斯角检测、SIFT特征提取这些基础的特征提取方法。

2. 目标检测:试试OpenCV自带的级联分类器做人脸检测,几行代码就能实现从图片里框出人脸,非常有成就感。

3. 轮廓检测:检测图片里物体的轮廓,然后可以做形状识别,比如识别图片里的圆形、正方形。

4. 模板匹配:找图片里有没有和模板一样的区域,比如你做一个找相同的小工具,或者批量识别网页里的按钮。

这个阶段你可以做第一个小项目了,比如:批量给图片加水印、批量裁剪图片统一尺寸、自动检测图片里的二维码、从图片里把人脸裁出来,这些项目用你学的基础操作就能做出来,做完对你提升很大。

 第三步:结合深度学习,做更复杂的任务(后续进阶)

现在OpenCV已经支持直接调用训练好的深度学习模型了,基础打好之后,你可以学这部分,做更复杂的任务:

- 用OpenCV调用训练好的YOLO模型,做目标检测,能识别图片里80种常见物体,代码不超过50行就能跑通。

- 做人脸识别,用OpenCV做检测,加上预训练的识别模型,就能做出一个简单的人脸签到系统。

- 视频处理:读取摄像头实时画面,实时做目标检测,就能做出一个简单的人员检测小工具。

 学习资源推荐,零基础不用乱找:

1. 官方文档:OpenCV官方有非常详细的Python教程,都是免费的,网址是https://docs.opencv.org/,遇到不会的函数直接查官方文档,最准确。

2. 书籍:《OpenCV-Python 中文教程》,这本是专门给Python用户写的入门教程,很多内容都是免费公开的,适合零基础。

3. 动手:其实OpenCV就是一个工具,不用背所有函数,用到的时候查就好,多动手写代码,比看十遍书都有用,做两个小项目就都记住了。

---

 写在最后

OpenCV其实就是一个给我们用的工具,它把复杂的图像处理算法都封装好了,零基础不用怕,你不用先把所有计算机视觉理论都学完再用它,你完全可以跑通第一个示例,边用边学,边做项目边补理论。

我们今天从介绍OpenCV,到环境搭建,再到跑通第一个完整的图片读写示例,已经把入门的第一步迈出去了,接下来就是多练手,找一个自己感兴趣的小需求,比如批量处理自己的照片,做个简单的人脸打卡,一步步来,很快就能上手。

现在计算机视觉的应用越来越多,学会OpenCV,不管是自己做工具提高效率,还是找相关的工作,都是非常有用的技能,入门其实比你想象的简单得多,赶紧动手跑第一个代码吧。

更多推荐