与图像旋转类似,OpenCV 也提供了在x 轴或y轴上翻转图像的方法。尽管翻转操作的使用频率较低,但它们仍然非常值得学习 - 并且出于您可能不会立即考虑的原因。
例如,让我们想象一下为一家小型初创公司工作,该公司想要构建一个机器学习分类器来检测图像中的人脸。我们需要一个示例人脸数据集,我们的算法可以用它来“学习”什么是人脸。但遗憾的是,该公司只为我们提供了 20 张人脸的小数据集,我们没有办法获取更多数据。
那么我们该怎么办?
我们应用翻转操作来扩充我们的数据集!
我们可以水平翻转每个人脸图像(因为人脸仍然是人脸,无论是否镜像)并将这些镜像版本用作额外的训练数据。
虽然这个例子听起来很愚蠢和做作,但事实并非如此。强大的、需要大量数据的深度学习算法在训练期间特意使用翻转来生成额外的数据(通过一种称为数据增强的技术)。
我们可以围绕x轴、y轴或什至两者翻转图像。
在开始代码之前查看图像翻转的输出可以更好地解释翻转图像。查看图 1以查看水平翻转的图像:
注意左边是原始图像,右边是水平镜像。
我们可以垂直做同样的事情
通过博文末尾或此处的的 代码下载…
下载本博文对应的代码项目,以下是下载解压后的项目结构:
我们的 opencv_flip.py 脚本将加载 opencv_logo.png 来自磁盘的图像,然后演示如何使用 cv2.flip 翻转图像的功能
第 2 行和第 3 行导入我们需要的 Python 包,而第 6-9 行解析我们的命令行参数。
我们在这里只需要一个参数, - 图像,这是我们要翻转的输入图像的路径。我们将此值默认为opencv_logo.png 我们项目目录中的图像。
现在让我们水平翻转图像:
我们从第12行和第13行开始,从磁盘加载输入图像并将其显示在屏幕上。
水平翻转图像是通过调用 cv2.flip第 17 行的函数,其输出如图 5 所示。
这 cv2.flip 方法需要两个参数: 图像 我们要翻转图像,并使用特定的代码/标记来确定我们如何翻转图像。
使用翻转代码值 1表示我们围绕y轴水平翻转图像。
指定翻转代码 0表示我们要围绕x轴垂直翻转图像:
下图显示了垂直翻转图像的输出:
最后,使用负翻转代码围绕两个轴翻转图像。
如下图所示
点击可下载对应的代码包
代码下载.