带Python的人工智能——计算机视觉

计算机视觉关注于利用计算机软硬件建模和复制人类视觉。在本章中,你将详细了解这一点。

计算机视觉

计算机视觉是一门研究如何从二维图像中重建、中断并理解三维场景的学科,这些图像基于场景中存在的结构属性。

计算机视觉层级结构

计算机视觉分为以下三大类 −

  • 低层次视觉------它包括用于特征提取的过程图像。

  • 中级视觉 − 包括物体识别和三维场景解读

  • 高层次视觉------包括对场景的概念描述,如活动、意图和行为。

计算机视觉与图像处理

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

计算机视觉是通过图像构建对物理物体进行明确且有意义的描述。计算机视觉的输出是对三维场景中结构的描述或解释。

应用

计算机视觉在以下领域有应用 −

机器人

  • 定位------自动确定机器人位置

  • 导航

  • 障碍物规避

  • 装配(孔中销钉、焊接、喷漆)

  • 作(例如PUMA机器人机械臂)

  • 人机交互(HRI):智能机器人用于与人互动和服务

医学

  • 分类与检测(例如病灶或细胞分类与肿瘤检测)

  • 2D/3D 分割

  • 三维人体器官重建(MRI或超声)

  • 视觉引导机器人手术

安全性

  • 生物识别(虹膜、指纹、面部识别)
  • 监控------检测某些可疑活动或行为

交通

  • 自动驾驶车辆
  • 安全,例如驾驶员警觉监测

工业自动化应用

  • 工业检查(缺陷检测)
  • 集会
  • 条码和包装标签读取
  • 对象排序
  • 文档理解(例如OCR)

安装有用软件包

对于用Python学习计算机视觉,可以使用一个流行的库OpenCV(Open Source Computer Vision)。它是一个主要面向实时计算机视觉的编程函数库。它用 C++ 编写,主要接口为 C++。你可以通过以下命令安装该软件包 −

复制代码
pip install opencv_python-X.X-cp36-cp36m-winX.whl

这里X代表你机器上安装的Python版本以及你使用的win32或64位。

如果你正在使用 anaconda 环境,请使用以下命令安装 OpenCV −

复制代码
conda install -c conda-forge opencv

阅读、书写与展示图像

大多数CV应用都需要输入图像并输出图像。在本节中,你将学习如何利用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()

现在,我们可以用 imwrite() 函数 − 将相同的图像写入另一种格式,比如 .png

复制代码
cv2.imwrite('image_flower.png',image)

输出 True 表示该图像已成功写入同一个文件夹中的.png文件。

复制代码
True

注 − 函数 destroyallWindows() 会直接销毁我们创建的所有窗口。

色彩空间转换

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

示例

请考虑这个例子,将图像从BGR转换为灰度。

如图所示导入 OpenCV 包 −

复制代码
import cv2

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

复制代码
image = cv2.imread('image_flower.jpg')

现在,如果我们用 imshow() 函数看到这张图片,就能看到这张图片属于 BGR。

复制代码
cv2.imshow('BGR_Penguins',image)

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

复制代码
image = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
cv2.imshow('gray_penguins',image)

边缘检测

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

示例

以下示例清晰地展示了边的识别。

如图所示导入 OpenCV 包 −

复制代码
import cv2
import numpy as np

现在,读取特定图像时,可以使用 imread() 函数。

复制代码
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的图片,并带有边缘检测功能。

人脸检测

人脸检测是计算机视觉的一个迷人的应用,使其更加真实且具有未来感。OpenCV内置了人脸检测功能。我们将使用Haar级联分类器进行人脸检测。

Haar Cascade Data

我们需要数据来使用Haar级联分类器。您可以在我们的OpenCV软件包中找到这些数据。安装OpenCV后,你可以看到文件夹名haarcascades。会有针对不同应用的.xml文件。现在,把所有文件复制出来用于不同用途,然后粘贴到当前项目下的新文件夹里。

示例

以下是利用Haar Cascade检测Amitabh Bachan面部的Python代码,如下图所示 −

如图所示导入 OpenCV 包 −

复制代码
import cv2
import numpy as np

现在,使用HaarCascadeClassifier来检测人脸 −

复制代码
face_detection=
cv2.CascadeClassifier('D:/ProgramData/cascadeclassifier/
haarcascade_frontalface_default.xml')

现在,读取特定图像时,使用**imread()**函数 −

复制代码
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)

这个Python程序会生成一张名为Face_AB.jpg的图像,带有面部检测功能,如图所示

眼球检测

眼睛检测是计算机视觉的另一个迷人应用,使其更加真实且富有未来感。OpenCV内置了进行眼睛检测的功能。我们将使用Haar级联分类器进行眼球检测。

示例

以下示例展示了使用 Haar Cascade 检测 Amitabh Bachan 面部的 Python 代码,如下图所示 −

如图所示导入 OpenCV 包 −

复制代码
import cv2
import numpy as np

现在,使用HaarCascadeClassifier来检测人脸 −

复制代码
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的图像,并带有眼睛检测功能,如图所示 −

相关推荐
好家伙VCC1 天前
### WebRTC技术:实时通信的革新与实现####webRTC(Web Real-TimeComm
java·前端·python·webrtc
萤丰信息1 天前
AI 筑基・生态共荣:智慧园区的价值重构与未来新途
大数据·运维·人工智能·科技·智慧城市·智慧园区
盖雅工场1 天前
排班+成本双管控,餐饮零售精细化运营破局
人工智能·零售餐饮·ai智能排班
神策数据1 天前
打造 AI Growth Team: 以 Data + AI 重塑品牌零售增长范式
人工智能·零售
2501_941333101 天前
数字识别与检测_YOLOv3_C3k2改进模型解析
人工智能·yolo·目标跟踪
逐梦苍穹1 天前
速通DeepSeek论文mHC:给大模型装上物理阀门的架构革命
人工智能·deepseek·mhc
运维小欣1 天前
Agentic AI 与 Agentic Ops 驱动,智能运维迈向新高度
运维·人工智能
前端玖耀里1 天前
如何使用python的boto库和SES发送电子邮件?
python
serve the people1 天前
python环境搭建 (十二) pydantic和pydantic-settings类型验证与解析
java·网络·python
小天源1 天前
Error 1053 Error 1067 服务“启动后立即停止” Java / Python 程序无法后台运行 windows nssm注册器下载与报错处理
开发语言·windows·python·nssm·error 1053·error 1067