您当前的位置: 首页 >  opencv

寒冰屋

暂无认证

  • 0浏览

    0关注

    2286博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

OpenCV简介

寒冰屋 发布时间:2020-07-26 16:34:05 ,浏览量:0

目录

介绍

安装

读取并绘制图像

对象检测

下一步

  • 下载源2.7 MB
介绍

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

安装

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

!pip install --upgrade opencv-python

pip是Python的默认软件包管理器和独立的可执行文件,但是以这种方式运行可确保将软件包安装到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可以很好地进行OpenCV和matplotlib如此整洁的集成。

图片来源:NASA

对象检测

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

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

让我们尝试对俄罗斯车牌进行预训练的分类器haarcascade_russian_plate_number.xml。如果要测试图像,可以使用Sergey Rodovnichenko的Lada 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)的。

关注
打赏
1665926880
查看更多评论
立即登录/注册

微信扫码登录

0.0542s