1、OpenCV初识:图像处理是什么?OpenCV的历史与优势、环境搭建(pip install opencv-python)、读取并显示第一张图片。
图像处理到底是什么?
说实话,我第一次接触图像处理时,脑子里全是问号。一张照片,在计算机眼里到底是什么?
说白了,图像就是一堆数字。你看到的彩色图片,计算机看到的是一堆0到255之间的整数。每个像素点,就是三个数字——红、绿、蓝的亮度值。嗯,就是这么简单粗暴。
我在项目中遇到过不少新人,总觉得图像处理很玄乎。其实你想想看,我们做的无非就是:把图片变成数字,然后对这些数字做加减乘除。仅此而已。
举个例子,你想让图片变亮?那就把所有像素的数值都加上一个固定值。想让它变暗?那就减去一个值。是不是一下子就理解了?
OpenCV的历史与优势
OpenCV全名叫Open Source Computer Vision Library。2000年由Intel公司发起,到现在已经二十多年了。我刚开始用的时候还是1.0版本,那时候文档少得可怜,踩坑踩到怀疑人生。
为什么选OpenCV?我个人习惯从三个角度看:
- 社区庞大——你遇到的大部分问题,网上都有人踩过。StackOverflow上一搜一大把。
- 性能强悍——底层用C++写的,处理速度比纯Python快几十倍。我做过对比,同样一个滤波操作,OpenCV比PIL快了三倍不止。
- 功能全面——从基础的图像读写,到人脸识别、物体追踪,甚至深度学习模型部署,它都能干。
核心优势一句话总结:OpenCV是目前工业界和学术界使用最广泛的计算机视觉库,没有之一。
环境搭建——pip install opencv-python
搭建环境其实就一行命令。但我建议你先确认一下Python版本,最好用3.7以上。
pip install opencv-python
如果你在国内,可能会遇到下载慢的问题。我一般加个镜像源:
pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple
小提示:安装完成后,在Python里输入 import cv2,如果不报错,就说明装好了。注意是cv2,不是opencv。为什么叫cv2?因为OpenCV 2.x版本开始,Python接口就统一叫cv2了。这个命名确实有点坑,我当年也困惑过。
避坑指南:我曾经遇到过一个问题——装完opencv-python后,发现缺少一些高级功能模块。如果你需要SIFT、SURF这些特征提取算法,还得装opencv-contrib-python:
pip install opencv-contrib-python
不过初学者先不用管,基础版够用了。
读取并显示第一张图片
好了,环境搭好了,我们来写第一行代码。读取一张图片,然后显示出来。
import cv2
# 读取图片
img = cv2.imread('cat.jpg')
# 显示图片
cv2.imshow('My First Image', img)
# 等待按键
cv2.waitKey(0)
# 关闭所有窗口
cv2.destroyAllWindows()
这段代码很简单,但有几个细节我得提醒你:
imread()如果图片路径不对,不会报错,而是返回None。我第一次写的时候,图片没显示出来,查了半天才发现是文件名拼错了。imshow()的第一个参数是窗口名称,随便起。waitKey(0)表示无限等待按键。如果不加这行,窗口会一闪而过。
为什么会这样?因为OpenCV的显示窗口是独立于Python主线程的。你想想看,如果不等待,程序跑完了,窗口自然就关了。
再补充一个我常用的写法——检查图片是否读取成功:
import cv2
img = cv2.imread('cat.jpg')
if img is None:
print('图片读取失败,请检查路径')
else:
cv2.imshow('My First Image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
嗯,这里要注意:OpenCV读取图片的默认颜色顺序是BGR,不是RGB。也就是说,你读进来的图片,蓝色通道在最前面。这个坑后面会专门讲,先记住有这么回事就行。
关于图片路径的小建议
我个人习惯把图片放在和Python脚本同一个目录下。这样路径写起来简单,不容易出错。如果你用绝对路径,记得用双反斜杠或者正斜杠:
# Windows系统
img = cv2.imread('C:\\Users\\YourName\\cat.jpg')
# 或者用正斜杠
img = cv2.imread('C:/Users/YourName/cat.jpg')
好了,到这里你已经完成了OpenCV的第一个程序。虽然只是读取和显示一张图片,但这是所有图像处理的基础。后面的所有操作,都是在这张图片上做文章。
下一章我们会聊图像的色彩空间和通道操作。到时候你会发现,原来一张图片里藏着这么多门道。
公众号:蓝海资料掘金营,微信deep3321