Python OpenCV教程详解

一、OpenCV介绍

OpenCV,全称为Open Source Computer Vision Library,是一个开源的计算机视觉库。对于包括视频处理、计算机视觉、机器学习在内的许多领域都有非常广泛的应用。OpenCV最初由英特尔公司发起,现在由Willow Garage、Itseez等公司及个人维护。OpenCV提供了丰富的图像处理和计算机视觉算法,涉及图像处理、特征提取、目标跟踪、人脸识别、机器学习等方面。其模块化的设计、开源的代码、跨平台的支持,赢得了广大计算机视觉从业者和工程师的青睐。

二、OpenCV安装

OpenCV可以在Python中使用,首先需要安装OpenCV库。OpenCV可以通过pip安装,只需要使用以下命令即可:

pip install opencv-python
pip install opencv-contrib-python

安装完成后,我们就可以在Python中使用OpenCV库了。

三、OpenCV图像读取和显示

在OpenCV中,使用cv2.imread()函数读取图像文件,函数参数为文件名和读取标志。

1 import cv2
2 
3 #读取图像
4 img = cv2.imread('lena.jpg',cv2.IMREAD_COLOR)
5 
6 #显示图像
7 cv2.imshow('image',img)
8 cv2.waitKey(0) #等待按键
9 cv2.destroyAllWindows() #销毁所有窗口

第4行代码中,cv2.IMREAD_COLOR表示按彩色图像的方式读取图像文件。读取完成后,使用cv2.imshow()函数显示图像。第7行代码中,第一个参数为窗口名称,第二个参数为要显示的图像的变量名。cv2.waitKey()函数用于等待按键,当按下任意键时程序退出。最后一行代码销毁所有的窗口。

四、OpenCV图像处理

1. 图像平滑处理

在OpenCV中,使用cv2.blur()函数进行图像平滑处理。函数的参数包括输入图像、卷积核大小等。例如:

1 import cv2
2 
3 #读取图像
4 img = cv2.imread('lena.jpg')
5 
6 #图像平滑处理,卷积核大小为5x5
7 kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5,5))
8 img_blur = cv2.blur(img, (5,5))
9 
10 #显示图像
11 cv2.imshow('image',img)
12 cv2.imshow('image_blur',img_blur)
13 cv2.waitKey(0) #等待按键
14 cv2.destroyAllWindows() #销毁所有窗口

上面的代码中,cv2.getStructuringElement()函数用于获取MORPH_RECT类型的卷积核。然后使用cv2.blur()平滑处理图像,最后用cv2.imshow()函数显示原图和平滑后的图像。运行代码后,我们可以看到平滑后的图像较原图模糊,可以起到一定的降噪作用。

2. 图像阈值处理

在OpenCV中,使用cv2.threshold()函数进行图像阈值处理。函数的参数包括输入图像、阈值、最大像素值等。例如:

1 import cv2
2 
3 #读取图像
4 img = cv2.imread('lena.jpg',0)
5 
6 #图像阈值处理
7 ret,img_threshold = cv2.threshold(img, 100, 255, cv2.THRESH_BINARY)
8 
9 #显示图像
10 cv2.imshow('image',img)
11 cv2.imshow('image_threshold',img_threshold)
12 cv2.waitKey(0) #等待按键
13 cv2.destroyAllWindows() #销毁所有窗口

上面的代码中,cv2.imread()函数读入的图像文件是灰度图像,因此第二个参数为0。然后使用cv2.threshold()函数进行阈值处理,threshold函数返回值有两个,第一个为阈值化的阈值值(在本例中为100),第二个为阈值化后的图像。最后使用cv2.imshow()函数显示原图和阈值化后的图像。

3. 图像边缘检测

在OpenCV中,使用cv2.Canny()函数进行图像边缘检测。函数的参数包括输入图像、阈值等。例如:

1 import cv2
2 
3 #读取图像
4 img = cv2.imread('lena.jpg',0)
5 
6 #图像边缘检测
7 img_canny = cv2.Canny(img, 100, 200)
8 
9 #显示图像
10 cv2.imshow('image',img)
11 cv2.imshow('image_canny',img_canny)
12 cv2.waitKey(0) #等待按键
13 cv2.destroyAllWindows() #销毁所有窗口

上面的代码中,cv2.imread()函数读入的图像文件是灰度图像,因此第二个参数为0。然后使用cv2.Canny()函数进行图像边缘检测,其中第二个和第三个参数分别为低阈值和高阈值,最后使用cv2.imshow()函数显示原图和边缘检测后的图像。

五、OpenCV图像处理实例

下面我们来看一个实例,通过OpenCV对图像进行颜色识别并在图像上标出颜色区域。

首先,我们需要加载一张彩色图像,并将图像进行平滑处理:

1 import cv2
2 import numpy as np
3 
4 #读取图像
5 img = cv2.imread('fruits.jpg')
6 
7 #图像平滑处理,卷积核大小为5x5
8 kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5,5))
9 img_blur = cv2.blur(img, (5,5))

然后,我们将图像转换到HSV颜色空间,从而可以使用颜色阈值过滤器实现对图像上的特定颜色进行识别。

1 #将图像转换到HSV颜色空间
2 img_hsv = cv2.cvtColor(img_blur, cv2.COLOR_BGR2HSV)
3 
4 #设定颜色区间
5 lower_red = np.array([0, 50, 50])
6 upper_red = np.array([10, 255, 255])
7 
8 #过滤出红色区域
9 mask = cv2.inRange(img_hsv, lower_red, upper_red)

接下来,我们对过滤出的颜色区域进行形态学处理,去掉噪点和孤立的区域:

1 #形态学处理
2 mask = cv2.erode(mask, kernel, iterations=2)
3 mask = cv2.dilate(mask, kernel, iterations=2)

最后,我们根据颜色区域的轮廓,使用cv2.drawContours()函数将颜色区域标出:

1 #查找轮廓
2 contours, hierarchy = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
3 
4 #标出颜色区域
5 for contour in contours:
6     cv2.drawContours(img, [contour], 0, (0,255,0), 3)
7 
8 #显示图像
9 cv2.imshow('image',img)
10 cv2.waitKey(0) #等待按键
11 cv2.destroyAllWindows() #销毁所有窗口

完整的代码如下:

1 import cv2
2 import numpy as np
3 
4 #读取图像
5 img = cv2.imread('fruits.jpg')
6 
7 #图像平滑处理,卷积核大小为5x5
8 kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5,5))
9 img_blur = cv2.blur(img, (5,5))
10 
11 #将图像转换到HSV颜色空间
12 img_hsv = cv2.cvtColor(img_blur, cv2.COLOR_BGR2HSV)
13 
14 #设定颜色区间
15 lower_red = np.array([0, 50, 50])
16 upper_red = np.array([10, 255, 255])
17 
18 #过滤出红色区域
19 mask = cv2.inRange(img_hsv, lower_red, upper_red)
20 
21 #形态学处理
22 mask = cv2.erode(mask, kernel, iterations=2)
23 mask = cv2.dilate(mask, kernel, iterations=2)
24 
25 #查找轮廓
26 contours, hierarchy = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
27 
28 #标出颜色区域
29 for contour in contours:
30     cv2.drawContours(img, [contour], 0, (0,255,0), 3)
31 
32 #显示图像
33 cv2.imshow('image',img)
34 cv2.waitKey(0) #等待按键
35 cv2.destroyAllWindows() #销毁所有窗口

六、总结

通过本文的介绍,我们了解了OpenCV的基本概念、安装方法,以及常见的图像处理方法。在实际应用中,OpenCV可以实现很多有趣的功能,如人脸识别、目标跟踪等。希望本文能为初学者提供一些帮助,让大家更好地掌握OpenCV这个强大的计算机视觉库。

原创文章,作者:NHZX,如若转载,请注明出处:https://www.506064.com/n/133925.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
NHZXNHZX
上一篇 2024-10-04 00:02
下一篇 2024-10-04 00:02

相关推荐

  • 如何查看Anaconda中Python路径

    对Anaconda中Python路径即conda环境的查看进行详细的阐述。 一、使用命令行查看 1、在Windows系统中,可以使用命令提示符(cmd)或者Anaconda Pro…

    编程 2025-04-29
  • Python计算阳历日期对应周几

    本文介绍如何通过Python计算任意阳历日期对应周几。 一、获取日期 获取日期可以通过Python内置的模块datetime实现,示例代码如下: from datetime imp…

    编程 2025-04-29
  • Python列表中负数的个数

    Python列表是一个有序的集合,可以存储多个不同类型的元素。而负数是指小于0的整数。在Python列表中,我们想要找到负数的个数,可以通过以下几个方面进行实现。 一、使用循环遍历…

    编程 2025-04-29
  • Python周杰伦代码用法介绍

    本文将从多个方面对Python周杰伦代码进行详细的阐述。 一、代码介绍 from urllib.request import urlopen from bs4 import Bea…

    编程 2025-04-29
  • Python中引入上一级目录中函数

    Python中经常需要调用其他文件夹中的模块或函数,其中一个常见的操作是引入上一级目录中的函数。在此,我们将从多个角度详细解释如何在Python中引入上一级目录的函数。 一、加入环…

    编程 2025-04-29
  • 蝴蝶优化算法Python版

    蝴蝶优化算法是一种基于仿生学的优化算法,模仿自然界中的蝴蝶进行搜索。它可以应用于多个领域的优化问题,包括数学优化、工程问题、机器学习等。本文将从多个方面对蝴蝶优化算法Python版…

    编程 2025-04-29
  • Python清华镜像下载

    Python清华镜像是一个高质量的Python开发资源镜像站,提供了Python及其相关的开发工具、框架和文档的下载服务。本文将从以下几个方面对Python清华镜像下载进行详细的阐…

    编程 2025-04-29
  • Python程序需要编译才能执行

    Python 被广泛应用于数据分析、人工智能、科学计算等领域,它的灵活性和简单易学的性质使得越来越多的人喜欢使用 Python 进行编程。然而,在 Python 中程序执行的方式不…

    编程 2025-04-29
  • Python字典去重复工具

    使用Python语言编写字典去重复工具,可帮助用户快速去重复。 一、字典去重复工具的需求 在使用Python编写程序时,我们经常需要处理数据文件,其中包含了大量的重复数据。为了方便…

    编程 2025-04-29
  • python强行终止程序快捷键

    本文将从多个方面对python强行终止程序快捷键进行详细阐述,并提供相应代码示例。 一、Ctrl+C快捷键 Ctrl+C快捷键是在终端中经常用来强行终止运行的程序。当你在终端中运行…

    编程 2025-04-29

发表回复

登录后才能评论