目录
介绍
安装
读取并绘制图像
对象检测
下一步
- 下载源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)的。