如何使用 OpenCV 从图像中检测旋转对象?

Posted

技术标签:

【中文标题】如何使用 OpenCV 从图像中检测旋转对象?【英文标题】:How to detect rotated object from image using OpenCV? 【发布时间】:2018-07-18 07:00:38 【问题描述】:

我一直在训练用于识别书籍的 OpenCV 分类器。要求是从图像中识别书籍。我已经使用了 1000 多张图像,OpenCV 能够检测到没有旋转的书籍。但是,当我尝试检测带有旋转的书籍时,它无法正常工作。所以我想知道他们是否仍然可以使用 OpenCV 检测图像中带有旋转的对象?

【问题讨论】:

【参考方案1】:

您使用什么功能来检测您的图书?您是否正在训练 CNN 并使用 OpenCV 部署它?在这种情况下,将旋转图像增强添加到您的训练中将使检测旋转书籍变得容易。

如果您改用传统的计算机视觉技术,您可以尝试使用一些旋转不变的特征提取器,例如 SURF,但是,结果将不如使用现在最先进的 CNN问题。

【讨论】:

我想识别一本书的封面,然后使用该识别区域提取书籍封面并保存。现在我只是使用书籍封面图像作为正面图像和非书籍封面图像作为负片来训练 haar 分类器。 在这种情况下甚至可以使用带有 Haar 级联的 SURF 或 ORB 吗? 您想识别“所有”书籍的封面还是只识别训练数据中表示的一组书籍? 所有书最好。【参考方案2】:

使用 OpenCV 和 SURF 或 ORB 等关键点匹配算法可以完美解决您的问题。你真的不需要分类器。根据我的经验,这种使用未经修改的 openCv 的解决方案可以放大以识别大约 10.000 张图像。

我会做的是: 离线:遍历您的图书图像以生成一个关键点描述符数据库,将每个描述符与它来自的图书的 id 匹配。 在线:计算查询图像的关键点并尝试将它们中的每一个匹配(使用 BF、FLANN 或 LSH)到预先计算的数据库的关键点。 投票选出与最多查询关键点匹配的数据库书籍封面。 尝试计算所选数据库书籍封面和查询图像之间的单应矩阵以验证匹配。

ORB、BRISK、SURF、SIFT 特征描述符都可用于此任务,并且旋转不变。 ORB 和 BRISK 更快,但性能稍差。

有关简单示例,请参见此链接: https://docs.opencv.org/3.3.0/dc/dc3/tutorial_py_matcher.html

【讨论】:

【参考方案3】:

首先,你应该了解pose estimationimage warping的主要理论思想。

您应该定义书籍的一些重要点(对每种类型的书籍都有效的一些特殊和强大的功能),然后您可以使用这些点来估计书籍的姿势。获得姿势角度后,您应该扭曲图像以对齐书籍。在书籍对齐之后,您应该执行特征提取,以便通过这种方式提高书籍检测的成功率。

总之,姿态估计翘曲(对齐)对于这些旋转问题很重要。

【讨论】:

以上是关于如何使用 OpenCV 从图像中检测旋转对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何定义阈值以仅检测图像中的绿色对象:Opencv [重复]

从 OpenCV 中的旋转矩阵和平移向量中获取旋转轴

使用 OpenCV 检测图像中已知形状/对象的方法

如何使用opencv从图像中检测文本

旋转模板图像并执行模板匹配

如何检测将显微镜图像旋转对齐到模板的良好特征