主页
  • 主页
  • 分类
  • 热文
  • 教程
  • 面试
  • 标签
Python 人工智能

Python 人工智能 教程

Python 人工智能 入门概念
Python 人工智能 开始使用
Python 人工智能 机器学习
Python 人工智能 数据准备
Python 人工智能 监督学习:分类
Python 人工智能 监督学习:回归
Python 人工智能 逻辑编程
Python 人工智能 无监督学习:聚类
Python 人工智能 自然语言处理 (NLP)
Python 人工智能 NLTK(自然语言工具包)
Python 人工智能 分析时间序列数据
Python 人工智能 语音识别
Python 人工智能 启发式搜索
Python 人工智能 游戏
Python 人工智能 神经网络
Python 人工智能 强化学习
Python 人工智能 遗传算法
Python 人工智能 计算机视觉
Python 人工智能 深度学习

教程

Python 人工智能 入门概念
Python 人工智能 开始使用
Python 人工智能 机器学习
Python 人工智能 数据准备
Python 人工智能 监督学习:分类
Python 人工智能 监督学习:回归
Python 人工智能 逻辑编程
Python 人工智能 无监督学习:聚类
Python 人工智能 自然语言处理 (NLP)
Python 人工智能 NLTK(自然语言工具包)
Python 人工智能 分析时间序列数据
Python 人工智能 语音识别
Python 人工智能 启发式搜索
Python 人工智能 游戏
Python 人工智能 神经网络
Python 人工智能 强化学习
Python 人工智能 遗传算法
Python 人工智能 计算机视觉
Python 人工智能 深度学习

Python 人工智能 计算机视觉


上一章 下一章

计算机视觉是一门研究如何使用计算机软件和硬件模拟和重现人类视觉的学科。在本章中,您将详细了解这方面内容。

计算机视觉

计算机视觉是一个研究如何从图像的二维视图重构、中断并理解三维场景及其结构属性的领域。

计算机视觉层次

计算机视觉分为三个基本类别:

  • 低级视觉 —— 包括图像处理以提取特征。
  • 中级视觉 —— 包括物体识别和三维场景解释。
  • 高级视觉 —— 包括对场景的概念描述,如活动、意图和行为。

计算机视觉 vs 图像处理

图像处理研究的是图像到图像的变换。输入和输出都是图像。

计算机视觉则是从图像中构造出明确、有意义的物理对象描述。计算机视觉的输出是对三维场景中结构的描述或解释。

应用

计算机视觉在以下领域找到应用:

  • 机器人
    • 定位——自动确定机器人的位置
    • 导航
    • 避障
    • 装配(如孔插销、焊接、喷漆)
    • 操控(例如 PUMA 机器人操控器)
    • 人机交互(HRI):智能机器人与人的互动和服务
  • 医学
    • 分类和检测(如病灶或细胞分类、肿瘤检测)
    • 二维/三维分割
    • 三维人体器官重建(MRI 或超声波)
    • 视觉引导的机器人手术
  • 安全
    • 生物识别(虹膜、指纹、面部识别)
    • 监控——检测特定可疑活动或行为
  • 交通运输
    • 自动驾驶车辆
    • 安全,例如驾驶员警觉监控
  • 工业自动化应用
    • 工业检查(缺陷检测)
    • 装配
    • 条形码和包装标签阅读
    • 物体分类
    • 文件理解(如光学字符识别 OCR)

安装有用的包

对于使用 Python 进行计算机视觉的应用,可以使用一个名为 OpenCV(开源计算机视觉库)的流行库。这是一个主要针对实时计算机视觉应用的编程函数库。OpenCV 用 C++ 编写,其主要接口也是 C++。您可以通过以下命令来安装此包:

pip install opencv_python-X.X-cp36-cp36m-winX.whl

这里的 X 表示您机器上安装的 Python 版本以及您使用的 32 位或 64 位版本。

如果您使用的是 Anaconda 环境,可以使用以下命令来安装 OpenCV:

conda install -c conda-forge opencv

读取、写入和显示图像

大多数计算机视觉应用程序需要获取图像作为输入并生成图像作为输出。在本节中,您将学习如何使用 OpenCV 提供的功能来读取和写入图像文件。

OpenCV 函数用于读取、显示和写入图像文件

OpenCV 提供了以下功能用于此目的:

  • imread() 函数 —— 这是用来读取图像的函数。OpenCV imread() 支持多种图像格式,如 PNG, JPEG, JPG, TIFF 等。
  • imshow() 函数 —— 这是用来在一个窗口中显示图像的函数。窗口会自动适应图像大小。OpenCV imshow() 支持多种图像格式,如 PNG, JPEG, JPG, TIFF 等。
  • imwrite() 函数 —— 这是用来写入图像的函数。OpenCV imwrite() 支持多种图像格式,如 PNG, JPEG, JPG, TIFF 等。

示例

下面的示例展示了读取一种格式的图像——在窗口中显示它,并将同一图像以另一种格式写入的 Python 代码。请考虑下面的步骤:

导入 OpenCV 包:

import cv2

现在,使用 imread() 函数读取特定的图像:

image = cv2.imread('image_flower.jpg')

使用 imshow() 函数显示图像。您可以看到图像的窗口名称为 image_flower:

cv2.imshow('image_flower', image)
cv2.destroyAllWindows()

image flower

现在,我们可以使用 imwrite() 函数将同一图像写入其他格式,比如 .png:

cv2.imwrite('image_flower.png', image)

输出结果 True 表明图像已经成功地在同一文件夹内以 .png 文件格式写入。

True

注释 —— destroyAllWindows() 函数简单地销毁了我们创建的所有窗口。

色彩空间转换

在 OpenCV 中,图像并不是使用常规的 RGB 颜色存储的,而是以相反的顺序,即 BGR 顺序存储的。因此,默认的颜色编码是在读取图像时使用 BGR。cvtColor() 函数用于将图像从一种颜色编码转换为另一种。

示例

下面的例子展示了如何将图像从 BGR 转换为灰度。

导入 OpenCV 包

import cv2

读取特定的图像

image = cv2.imread('image_flower.jpg')

使用 imshow() 函数查看这张图片,可以看到这张图片是以 BGR 格式存在的

cv2.imshow('BGR_Penguins', image)

penguine

使用 cvtColor() 函数将这张图片转换为灰度

image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
cv2.imshow('gray_penguins', image)

grey penguine

边缘检测

人类在看到草图后能够轻易地识别出许多物体类型及其姿态。这就是为什么边缘在人类生活中以及计算机视觉的应用中扮演着重要的角色。OpenCV 提供了一个非常简单且实用的函数 Canny() 用于检测边缘。

边缘检测示例

下面的示例清楚地标识出了边缘。

导入 OpenCV 包

import cv2
import numpy as np

读取特定的图像

image = cv2.imread('Penguins.jpg')

使用 Canny() 函数检测已经读取图像的边缘

cv2.imwrite('edges_Penguins.jpg', cv2.Canny(image, 200, 300))

使用 imshow() 函数展示带有边缘的图像

cv2.imshow('edges', cv2.imread('edges_Penguins.jpg'))

这个 Python 程序将会创建一个带有边缘检测的名为 edges_penguins.jpg 的图像。

edges penguins

边缘企鹅图像

人脸识别

人脸识别是计算机视觉中最引人入胜的应用之一,它使技术更加现实也更具未来感。OpenCV 内置了进行人脸识别的功能。我们将使用 Haar 级联分类器来进行人脸识别。

Haar 级联数据

使用 Haar 级联分类器时,我们需要数据。这些数据可以在 OpenCV 包中找到。安装完 OpenCV 后,你会看到一个名为 haarcascades 的文件夹。在这个文件夹中有适用于不同应用的 .xml 文件。现在,根据不同的用途复制所有相关文件,并将它们粘贴到当前项目的新的文件夹中。

示例

下面是一个使用 Haar 级联进行人脸检测的 Python 代码示例,该示例检测如下图所示的 Amitabh Bachan 的脸部:

ab face

导入 OpenCV 包

import cv2
import numpy as np

使用 Haar 级联分类器检测脸部

face_detection = cv2.CascadeClassifier('D:/ProgramData/cascadeclassifier/haarcascade_frontalface_default.xml')

读取特定的图像

img = cv2.imread('AB.jpg')

将图像转换为灰度图像,因为它接受灰度图像

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

使用 face_detection.detectMultiScale 进行实际的人脸检测

faces = face_detection.detectMultiScale(gray, 1.3, 5)

在整个脸部周围绘制矩形

for (x, y, w, h) in faces:
    img = cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 3)
cv2.imwrite('Face_AB.jpg', img)

Face AB

眼睛检测

眼睛检测是计算机视觉中另一个迷人的应用,它使得技术更加现实也更具未来感。OpenCV 内置了进行眼睛检测的功能。我们将使用 Haar 级联分类器来进行眼睛检测。

示例

下面的示例给出了使用 Haar 级联检测给定图像中 Amitabh Bachan 的眼睛的 Python 代码:

Haar AB Face

导入 OpenCV 包

import cv2
import numpy as np

使用 Haar 级联分类器检测眼睛

eye_cascade = cv2.CascadeClassifier('D:/ProgramData/cascadeclassifier/haarcascade_eye.xml')

使用 imread() 函数读取特定的图像

img = cv2.imread('AB_Eye.jpg')

将图像转换为灰度图像,因为它接受灰度图像

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

使用 eye_cascade.detectMultiScale 进行实际的眼睛检测

eyes = eye_cascade.detectMultiScale(gray, 1.03, 5)

在整个眼睛周围绘制矩形

for (ex, ey, ew, eh) in eyes:
    img = cv2.rectangle(img, (ex, ey), (ex + ew, ey + eh), (0, 255, 0), 2)
cv2.imwrite('Eye_AB.jpg', img)

这个 Python 程序将会创建一个带有眼睛检测的名为 Eye_AB.jpg 的图像。

Eye AB

上一章 下一章
阅读号二维码

关注阅读号

联系二维码

联系我们

© 2024 Yoagoa. All rights reserved.

粤ICP备18007391号

站点地图