访问量: 10 次浏览
计算机视觉涉及到使用计算机软件和硬件对人类视觉进行建模和复制。在本章中,你将详细了解这方面的知识。
计算机视觉是一门研究如何从二维图像中重建、中断和理解三维场景的学科,以场景中存在的结构属性为依据。
计算机视觉被分为以下三个基本类别
图像处理研究图像到图像的转换。图像处理的输入和输出都是图像。
计算机视觉是从物理对象的图像中构建明确、有意义的描述。计算机视觉的输出是对三维场景中结构的描述或解释。
计算机视觉在以下领域的应用
机器人学
医学
安全
交通运输
工业自动化应用
对于使用Python的计算机视觉,你可以使用一个叫做
OpenCV
(开源计算机视觉)的流行库。它是一个主要针对实时计算机视觉的编程函数库。它是用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级联分类器。你可以在我们的OpenCV包中找到这些数据。安装完OpenCv后,你可以看到文件夹名称为haarcascades 。
这里会有用于不同应用的 .xml 文件。现在,复制所有这些文件用于不同的用途,然后粘贴到当前项目下的一个新文件夹中。
例子
以下是使用Haar Cascade的Python代码,用于检测以下图片中所示的Amitabh Bachchan的脸。

导入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的Python代码来检测以下图片中给出的Amitabh Bachchan的脸。

导入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的图像,并进行眼睛检测,如图所示
