目录

介绍

安装

读取并绘制图像

对象检测

下一步


介绍

这是我们有关学习Python及其在机器学习和AI中的用途的系列文章中的第五个模块。我们只是快速浏览了一些有趣的库,让我们立即开始使用OpenCV

安装

通过在Jupyter Notebook单元中运行以下命令,可以通过pip安装OpenCV

!pip install --upgrade opencv-python

pipPython的默认软件包管理器和独立的可执行文件,但是以这种方式运行可确保将软件包安装到Anaconda环境中。

如果软件包安装正确,则此Python代码应运行无误:

import cv2

因为我们要在Jupyter Notebook中显示图像,所以我们还应该确保matplotlib已安装:

!pip install --upgrade matplotlib

读取并绘制图像

读取OpenCV可以使用的图像很简单:

import cv2
im = cv2.imread("path/to/image.jpg")

OpenCV支持多种图像格式,当它无法解析图像时,结果imread将为None。请注意,如果未找到图像文件,则不会引发任何错误——结果None也是如此。

假设找到了图像,我们可以使用matplotlib将其绘制在Jupyter Notebook中。为此,我们将使用以下辅助函数:

from matplotlib import pyplot
def plot_img(img):
    rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    pyplot.imshow(rgb)

OpenCV读取BGR颜色格式的图像,但matplotlib要使用RGB,因此首先必须转换图像。然后可以将其绘制出来。

您可以按以下方式使用此函数:

plot_img(im)

由于OpenCV图像实际上只是包含像素值的多维NumPy数组,因此matplotlib可以很好地进行OpenCVmatplotlib如此整洁的集成。

图片来源:NASA

对象检测

很多OpenCV可以做的。我们将专门关注对象检测。

对象检测与所谓的级联分类器一起使用。这种方法使用了机器学习:分类器在包含所需对象的图像(正图像)和不包含所需对象的图像(负图像)上进行训练。您可以训练自己的分类器,但是OpenCV还提供了一些可从其GitHub下载的预训练模型。

让我们尝试对俄罗斯车牌进行预训练的分类器haarcascade_russian_plate_number.xml。如果要测试图像,可以使用Sergey RodovnichenkoLada Vesta图像

我们可以读取图像并将其绘制出来,看一切是否顺利,就像之前一样:

car = cv2.imread("Pictures/lada-vesta.jpg")
plot_img(car)



接下来,我们创建分类器:

classifier = cv2.CascadeClassifier()
classifier.load("path/to/haarcascade_russian_plate_number.xml")


检测工作通过以下detectMultiScale方法完成:

plates = classifier.detectMultiScale(car)

这将返回一个NumPy数组。它实际上是一个数组的数组,每个内部数组都是格式为[ x, y, width, height ]的检测板的矩形边界。为了直观地显示它们,我们可以在图像上绘制矩形,然后绘制结果:

with_indicators = car
for plate in plates:
    x, y, width, height = plate
    with_indicators = cv2.rectangle(with_indicators, (x, y), 
                                    (x + width, y + height), 
                                    (0, 0, 255), 5)

矩形函数获取图像、左上角坐标、右下角坐标、颜色和厚度。它返回一个带有矩形的新图像。我们可以绘制结果:

plot_img(with_indicators)

这个例子展示了OpenCV针对俄罗斯车牌的预训练分类器,但这不是唯一可用的分类器。还有针对面部、眼睛等的预训练分类器,它们的使用方式与此分类器完全相同。

下一步

我们仅涉及OpenCV可以做的事情。OpenCV具有更多的处理功能(转换、过滤器、2D特征检测等),并且可以实时处理视频帧。互联网上有很多有关OpenCV的资料。该官方教程是一个良好的开端,但你也可以找到很多的帮助,如果你想与OpenCV的解决问题专门进行搜索。

接下来的模块中,我们将谈谈使用自然语言工具包(NLTK)的。

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐