# opencv-python,一个图像处理强悍的 Python 库!
很多小伙伴平时处理图片,第一反应都是打开修图软件,单张调个色、裁个图还行,要是几十上百张图片要批量处理,手动操作能累到眼花。我当初刚接触图像处理的时候,就被opencv-python惊艳到了——它是Python里大名鼎鼎的计算机视觉库,处理图片强悍又高效,几行代码就能实现裁剪、调色、特效、边缘识别等各种操作。今天猫哥就带大家从零入门,掌握最实用的核心操作,看完就能上手玩起来。
## 一、安装导入:一键开启图像处理之旅
opencv-python是第三方库,需要先安装。大家打开终端,输入一行pip命令就能完成安装:
```python
# 安装opencv-python
pip install opencv-python
安装完成后,导入的时候注意啦,库名虽然叫opencv-python,但导入时的名字是cv2,这是很多新手第一次用都会踩的小坑:
# 导入OpenCV库
import cv2
小贴士:下载慢的小伙伴可以加上清华镜像源,命令改成 pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple,速度会快很多。
二、图片的读取与显示:迈出第一步
处理图片的第一步,肯定是把图片读进程序里,再显示出来看看效果。OpenCV里对应三个核心函数,我们一个个说。
首先是读取图片,用cv2.imread(),括号里填图片的文件路径。然后显示图片用cv2.imshow(),第一个参数是窗口名字,第二个是我们读取的图片对象。
这里有个新手必踩的坑:只写imshow的话,窗口会一闪而过,根本看不清。所以必须搭配cv2.waitKey()和cv2.destroyAllWindows(),前者是等待用户按键,后者是用完关闭所有窗口。
完整代码示例:
import cv2
# 读取图片,替换成你自己的图片路径
img = cv2.imread("test.jpg")
# 显示图片,窗口标题为“原图”
cv2.imshow("原图", img)
# 等待按键,参数0表示无限等待,按任意键继续
cv2.waitKey(0)
# 关闭所有窗口
cv2.destroyAllWindows()
注意事项:
- 图片路径一定要写对,如果图片和代码在同一个文件夹,直接写文件名就行;否则要写完整路径。
- 建议图片路径和文件名都用英文,部分旧版本OpenCV对中文路径支持不好,容易读取失败返回空值,导致后续代码报错。
三、3个基础操作:日常修图全够用
学会读取显示后,我们来学三个最常用的基础操作,日常处理图片基本都离不开它们。
3.1 转灰度图:简化图像信息
彩色图片是由蓝、绿、红三个颜色通道组成的,数据量很大。很多图像处理算法(比如识别文字、检测物体)都会先把图片转成灰度图,去掉颜色信息,只保留明暗亮度,既能减少计算量,又不影响核心特征识别。
用cv2.cvtColor()函数就能转换,参数cv2.COLOR_BGR2GRAY表示从BGR彩色转灰度:
import cv2
img = cv2.imread("test.jpg")
# 彩色图转灰度图
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow("灰度图", gray_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
小贴士:OpenCV默认的彩色通道顺序是BGR(蓝绿红),和我们平时说的RGB顺序相反。不过只用OpenCV自带函数处理的话完全不用在意,只有搭配其他库显示图片时才需要转换顺序。
3.2 图片裁剪:精准截取指定区域
有时候我们只需要图片的一部分,比如截头像、扣取指定区域。在OpenCV里,图片本质上是一个numpy数组,我们直接用数组切片就能完成裁剪,非常方便。
注意切片顺序是[高度范围, 宽度范围],也就是先选上下范围,再选左右范围:
import cv2
img = cv2.imread("test.jpg")
# 裁剪:行(高度)从100到300,列(宽度)从200到400
crop_img = img[100:300, 200:400]
cv2.imshow("裁剪后", crop_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
3.3 缩放图片:调整尺寸
做批量处理的时候,经常需要把图片统一成一样的大小,用cv2.resize()就能快速缩放。注意它的尺寸参数格式是(宽度, 高度),和数组的“高宽”顺序刚好相反,别写反了哦。
import cv2
img = cv2.imread("test.jpg")
# 缩放到宽500,高300
resized_img = cv2.resize(img, (500, 300))
# 也可以按比例缩放,比如宽高都缩小一半
resized_img2 = cv2.resize(img, (0,0), fx=0.5, fy=0.5)
cv2.imshow("缩放后", resized_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
四、两个酷炫特效:上手就出效果
学会基础操作后,我们来玩两个很有成就感的特效,几行代码就能做出专业修图的效果。
4.1 高斯模糊:给图片加“磨砂滤镜”
高斯模糊是最常用的模糊效果,原理是让每个像素点和周围像素取平均值,让画面变得柔和。它可以用来给图片去噪、做磨皮效果,或者做背景虚化。
用cv2.GaussianBlur()实现,第二个参数是模糊核的大小,必须是奇数,数值越大模糊效果越强:
import cv2
img = cv2.imread("test.jpg")
# 高斯模糊,核大小(15,15)
blur_img = cv2.GaussianBlur(img, (15, 15), 0)
cv2.imshow("高斯模糊", blur_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
4.2 Canny边缘检测:秒变线稿风
边缘检测能自动找出图片里物体的轮廓线条,把彩色照片变成素描线稿的效果,是做物体识别、形状检测的基础步骤。OpenCV里的Canny算法效果好、参数简单,非常适合新手用。
两个阈值参数控制边缘的严格程度,数值越大,检测出的边缘越少:
import cv2
img = cv2.imread("test.jpg")
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Canny边缘检测,两个数值是阈值
edge_img = cv2.Canny(gray_img, 50, 150)
cv2.imshow("边缘检测", edge_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
大家可以调整两个阈值的数值,看看边缘线条的变化,很有意思。
五、保存图片:把成果存下来
处理完的图片,我们用cv2.imwrite()保存到本地,第一个参数是保存的文件名,第二个是处理后的图片对象。这个功能是批量处理的核心,比如给100张图片统一改尺寸,循环处理完一键保存就行。
import cv2
img = cv2.imread("test.jpg")
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 保存灰度图
cv2.imwrite("gray_test.jpg", gray_img)
print("图片保存成功!")
六、动手练一练:综合小案例
学到这里,我们来做个小练习,把今天的知识点串起来:读取一张图片,先转成灰度图,再做边缘检测,最后把结果保存成edge_result.jpg。
参考代码:
import cv2
# 1. 读取图片
img = cv2.imread("test.jpg")
# 2. 转灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 3. 边缘检测
edge = cv2.Canny(gray, 60, 160)
# 4. 保存结果
cv2.imwrite("edge_result.jpg", edge)
# 5. 显示结果
cv2.imshow("最终效果", edge)
cv2.waitKey(0)
cv2.destroyAllWindows()
大家可以自己换不同的阈值,调出你觉得最好看的线稿效果。
今天我们从安装导入开始,学习了图片的读取显示、转灰度、裁剪、缩放四个基础操作,还有高斯模糊和边缘检测两个实用特效,最后学会了保存处理后的图片。这些都是OpenCV最核心的入门技能,掌握之后你已经可以做批量改尺寸、批量转灰度、生成线稿图等很多实用的小工具了。
OpenCV的功能远不止这些,后续猫哥还会给大家分享人脸检测、图片加水印、视频处理等更多好玩的玩法。