欢迎光临散文网 会员登陆 & 注册

使用OpenCV和Python(正确)旋转图像(P1)

2022-02-07 18:32 作者:闲予1217  | 我要投稿

在这篇文章的剩余部分,我将讨论使用OpenCV和Python旋转图像时可能遇到的常见问题。

具体来说,我们将研究在旋转过程中,当图像的角点被“切断”时会发生什么。

为了确保我们都理解OpenCV和Python的轮换问题,我将:

  • 从一个简单的例子开始演示旋转问题。

  • 提供旋转功能,确保图像在旋转过程中不会被切断。

  • 讨论我是如何使用此方法解决药片识别问题的。

OpenCV的一个简单旋转问题

让我们以一个示例脚本开始这篇博客文章。

打开一个新文件,将其命名为rotate_simple.py,并输入以下代码:

第3-6行首先导入我们所需的Python包。

如果您还没有安装imutils,即我的OpenCV便利功能系列,那么现在就可以在终端中输入以下代码:

如果已经安装了imutils,请确保已升级到最新版本:

从这里开始,第8-10行解析我们的命令行参数。我们在这里只需要一个开关,——image,这是我们的映像驻留在磁盘上的路径。

让我们继续实际旋转我们的图像:

第15行加载我们要从磁盘旋转的图像。

然后,我们以15度的增量(第18行)在[0,360]范围内的各种角度上循环。

对于每一个角度,我们称之为imutils。旋转,将图像围绕图像中心旋转指定数量的角度。然后我们将旋转后的图像显示到屏幕上。

第24-27行执行相同的过程,但这次我们称之为imutils.rotate_bound(我将在下一节提供此函数的实现)。

正如该方法的名称所示,我们将确保整个图像都绑定在窗口内,并且没有任何图像被切断。

要查看此脚本的运行情况,请确保使用本文的结尾部分找到源代码,然后执行以下命令:

使用imutils的输出。非方形图像上的旋转功能如下所示:

(图还没做好,过一段时间会补上)

正如你所看到的,图像在旋转时被“切断”——无法将整个图像放在视野中。

但如果我们使用imutils。我们可以解决这个问题:

(同上图)

太棒了,我们解决了问题!

那么这是否意味着我们应该始终使用.rotate_bound到.rotate法?

是什么让它如此特别?

究竟发生了什么?

我将在下一节回答这些问题。



使用OpenCV和Python(正确)旋转图像(P1)的评论 (共 条)

分享到微博请遵守国家法律