Python OpenCV精讲系列 - 入门指南(一)
💖💖⚡️⚡️ 专栏:Python OpenCV精讲 ⚡️⚡️💖💖
本专栏聚焦于Python结合OpenCV库进行计算机视觉开发的专业教程。通过系统化的课程设计,从基础概念入手,逐步深入到图像处理、特征检测、物体识别等多个领域。适合希望在计算机视觉方向上建立坚实基础的技术人员及研究者。每一课不仅包含理论讲解,更有实战代码示例,助力读者快速将所学应用于实际项目中,提升解决复杂视觉问题的能力。无论是入门者还是寻求技能进阶的开发者,都将在此收获满满的知识与实践经验。
1. OpenCV简介
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库。它支持多种编程语言,包括Python、C++等,并且在图像处理、视频分析、模式识别等领域有着广泛的应用。
OpenCV最初由Intel开发,后来由Willow Garage接手维护,现在由Itseez公司负责。OpenCV拥有强大的社区支持和丰富的文档资源,是学习计算机视觉的理想选择。
2. 安装OpenCV
在开始使用OpenCV之前,您需要确保已经在您的系统上安装了Python和OpenCV库。以下是在不同操作系统上安装OpenCV的方法:
2.1 Windows
-
安装Python
如果您还没有安装Python,请访问Python官方网站下载最新版本的Python安装包,并按照提示完成安装。在安装过程中,请确保勾选“Add Python to PATH”选项。 -
安装OpenCV
打开命令提示符,运行以下命令来安装OpenCV:pip install opencv-python
如果您还需要使用图形界面功能,可以安装
opencv-python-headless
:pip install opencv-python-headless
-
验证安装
打开Python解释器,尝试导入OpenCV模块:import cv2 print(cv2.__version__)
如果没有出现任何错误,并且打印出了OpenCV的版本号,那么恭喜您,OpenCV已经成功安装。
2.2 Linux (Ubuntu)
-
安装Python
如果您还没有安装Python,请在终端中运行以下命令:sudo apt-get update sudo apt-get install python3
-
安装OpenCV
打开终端,运行以下命令来安装OpenCV:pip3 install opencv-python
如果您还需要使用图形界面功能,可以安装
opencv-python-headless
:pip3 install opencv-python-headless
-
验证安装
打开Python解释器,尝试导入OpenCV模块:import cv2 print(cv2.__version__)
如果没有出现任何错误,并且打印出了OpenCV的版本号,那么恭喜您,OpenCV已经成功安装。
2.3 macOS
-
安装Python
如果您还没有安装Python,请在终端中运行以下命令:brew install python
-
安装OpenCV
打开终端,运行以下命令来安装OpenCV:pip3 install opencv-python
如果您还需要使用图形界面功能,可以安装
opencv-python-headless
:pip3 install opencv-python-headless
-
验证安装
打开Python解释器,尝试导入OpenCV模块:import cv2 print(cv2.__version__)
如果没有出现任何错误,并且打印出了OpenCV的版本号,那么恭喜您,OpenCV已经成功安装。
3. 第一个OpenCV程序
让我们通过一个简单的例子来展示如何使用OpenCV读取和显示一张图片。
3.1 创建Python脚本
打开文本编辑器,创建一个新的Python文件,例如命名为read_image.py
。
3.2 编写代码
将以下代码复制到您刚刚创建的Python文件中:
import cv2def main():# 加载图片img_path = 'path/to/your/image.jpg'img = cv2.imread(img_path)if img is None:print("Error: File not found!")return# 显示图片cv2.imshow('Image', img)# 等待按键按下cv2.waitKey(0)# 关闭所有窗口cv2.destroyAllWindows()if __name__ == "__main__":main()
3.3 运行程序
确保您已经将一张图片放在了正确的路径下,并修改了img_path
变量的值。然后,在命令行中运行以下命令:
python read_image.py
这将打开一个窗口,显示您选择的图片。按任意键关闭窗口。
4. 图像读取详解
在上面的例子中,我们使用了cv2.imread()
函数来加载一张图片。现在,让我们更深入地了解一下这个函数。
img = cv2.imread(img_path)
-
参数:
img_path
:图片的文件路径。- 可选参数
flags
:读取图片的方式。默认值为cv2.IMREAD_COLOR
,表示读取彩色图片。其他选项包括:cv2.IMREAD_GRAYSCALE
:读取灰度图片。cv2.IMREAD_UNCHANGED
:读取原图,包括alpha通道(如果有)。
-
返回值:
- 返回一个NumPy数组,表示图片数据。
- 如果文件不存在或无法读取,返回
None
。
注意事项:
- 如果图片路径不正确或者图片格式不被支持,
cv2.imread()
将会返回None
。因此,在使用图片数据前,最好检查一下是否成功加载了图片。 - OpenCV默认使用BGR颜色空间而不是RGB。这是因为早期的计算机视觉算法大多基于BGR颜色空间设计。如果您希望在其他颜色空间(如RGB)中处理图片,可以通过
cv2.cvtColor()
函数进行转换。
5. 图像显示详解
在上面的例子中,我们使用了cv2.imshow()
和cv2.waitKey()
函数来显示图片和等待用户按键。现在,让我们更深入地了解一下这两个函数。
cv2.imshow('Image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
-
cv2.imshow()
:- 参数:
window_name
:窗口的名字。img
:要显示的图片数据。
- 功能:
- 创建一个名为
window_name
的窗口,并在其中显示图片img
。
- 创建一个名为
- 参数:
-
cv2.waitKey()
:- 参数:
delay
:等待的毫秒数。如果为0,则表示等待用户按键。
- 返回值:
- 返回用户按下的按键的ASCII码。
- 功能:
- 等待用户按键,并返回按键的ASCII码。如果
delay
为非零值,则等待指定的毫秒数后返回。
- 等待用户按键,并返回按键的ASCII码。如果
- 参数:
-
cv2.destroyAllWindows()
:- 功能:
- 关闭所有创建的窗口。
- 功能:
注意事项:
- 在使用
cv2.imshow()
显示图片时,需要确保在显示图片之前已经加载了图片并且没有出错。否则,可能会导致程序崩溃。 - 使用
cv2.waitKey()
等待用户按键时,可以根据按键的不同实现不同的功能。例如,您可以监听特定的按键来触发图片保存、关闭窗口等操作。
6. 实践练习
现在,让我们通过一些实践练习来加深对OpenCV的理解。
6.1 练习读取不同类型的图片
尝试使用不同的读取方式读取图片,并观察结果。
import cv2def main():# 加载图片img_path = 'path/to/your/image.jpg'img_color = cv2.imread(img_path, cv2.IMREAD_COLOR)img_gray = cv2.imread(img_path, cv2.IMREAD_GRAYSCALE)img_unchanged = cv2.imread(img_path, cv2.IMREAD_UNCHANGED)# 显示图片cv2.imshow('Color Image', img_color)cv2.imshow('Grayscale Image', img_gray)cv2.imshow('Unchanged Image', img_unchanged)# 等待按键按下cv2.waitKey(0)# 关闭所有窗口cv2.destroyAllWindows()if __name__ == "__main__":main()
6.2 练习保存图片
尝试使用cv2.imwrite()
函数保存图片。
import cv2def main():# 加载图片img_path = 'path/to/your/image.jpg'img = cv2.imread(img_path)if img is None:print("Error: File not found!")return# 显示图片cv2.imshow('Image', img)# 等待按键按下key = cv2.waitKey(0)if key == ord('s'):cv2.imwrite('output.jpg', img)print("Image saved as output.jpg")# 关闭所有窗口cv2.destroyAllWindows()if __name__ == "__main__":main()
在这个练习中,我们添加了一个按键监听,如果用户按下s
键,则会将当前显示的图片保存为output.jpg
。
7. 高级实践
为了更好地理解OpenCV的使用,我们还可以进行一些更高级的实践,比如使用OpenCV来进行图像缩放、旋转、裁剪等操作。
7.1 图像缩放
使用cv2.resize()
函数可以轻松地调整图像的大小。
import cv2def main():# 加载图片img_path = 'path/to/your/image.jpg'img = cv2.imread(img_path)if img is None:print("Error: File not found!")return# 缩放图片scale_percent = 50 # 缩放比例width = int(img.shape[1] * scale_percent / 100)height = int(img.shape[0] * scale_percent / 100)dim = (width, height)resized = cv2.resize(img, dim, interpolation=cv2.INTER_AREA)# 显示原始图片和缩放后的图片cv2.imshow('Original Image', img)cv2.imshow('Resized Image', resized)# 等待按键按下cv2.waitKey(0)# 关闭所有窗口cv2.destroyAllWindows()if __name__ == "__main__":main()
7.2 图像旋转
使用cv2.getRotationMatrix2D()
和cv2.warpAffine()
函数可以实现图像的旋转。
import cv2
import numpy as npdef main():# 加载图片img_path = 'path/to/your/image.jpg'img = cv2.imread(img_path)if img is None:print("Error: File not found!")return# 获取图像中心center = (img.shape[1] // 2, img.shape[0] // 2)# 计算旋转矩阵angle = 45 # 旋转角度scale = 1.0 # 缩放比例rotation_matrix = cv2.getRotationMatrix2D(center, angle, scale)# 应用仿射变换rotated = cv2.warpAffine(img, rotation_matrix, (img.shape[1], img.shape[0]))# 显示原始图片和旋转后的图片cv2.imshow('Original Image', img)cv2.imshow('Rotated Image', rotated)# 等待按键按下cv2.waitKey(0)# 关闭所有窗口cv2.destroyAllWindows()if __name__ == "__main__":main()
8. 小结
在本篇文章中,我们介绍了OpenCV的基本概念,并展示了如何安装OpenCV以及如何使用它来读取和显示图片。这是OpenCV最基础的功能之一,也是后续学习OpenCV更多高级特性的基石。