【问题标题】:OpenCV full rotation from moments?OpenCV 从片刻开始全面旋转?
【发布时间】:2013-06-15 22:11:40
【问题描述】:

我正在尝试从先前存储的同一对象的轮廓中识别图像中的对象。

在特征检测方面遇到了巨大的麻烦(我的对象似乎没有任何特征,至少不是所有特征),我使用 matchShapes() 函数获得了更好的结果,该函数显然使用了 Hu 矩。

当我找到匹配的形状时,我通过比较它的长轴和 x 轴来得到它的旋转,根据这个答案:Find the orientation of an image

但是,这只提供了 -90 到 90 度之间的旋转。 我需要知道对象是否旋转了 180 度。 我提供了一些图片来进一步说明我的问题:

上面两张图片显示的角度大致相同,但它们应该相隔 180 度。 有什么明显的方法可以计算它们的完整旋转吗?我在这里错过了什么吗?我尝试了一些 hacky 方法,但没有一个足够可靠。

任何帮助或建议将不胜感激。谢谢!

【问题讨论】:

    标签: opencv image-processing computer-vision raspberry-pi image-rotation


    【解决方案1】:

    这个想法很老套,但会奏效。使用 matchShapes 在图像中定位对象后,提取边界框,使用 findContours 函数,然后使用已知轮廓模板对平方差求和。将对象旋转 180 度后执行相同操作。为您提供最小差异总和的测试用例将是正确的方向。

    【讨论】:

    • 谢谢!我会尝试一下。我可以为此使用 openCV 中已有的 absDiff() 函数吗?
    • 当然,绝对值得一试。将比平方差之和更快。
    • 我明天会继续这个,但我想了一点。首先,这不是要求形状具有相同数量的点吗?当它们不一样大时,我应该删除点吗?从哪里?积分不需要为此排序吗?他们是吗?对于这个问题,我还有另一个想法,我比较了质心距离。我检查了轮廓质心是否比中心更接近翻转的质心。最大的问题是形状需要完全重叠才能工作。此处说明:hascanvas.com/resolveorientationdirection
    • 您正在寻找的是所谓的尺度不变性。获得要查找的对象的边界框后,将框的大小与模板图像的大小进行比较。找到与两者相关的比例因子。在计算 absDiff 之前,缩放对象的边界框以匹配模板的大小。然后,您将能够轻松地做出改变。使用质心是个好主意,但如果对象是水平对称的,那么即使旋转 180 度,质心也会在同一个位置结束。
    猜你喜欢
    • 2016-08-25
    • 1970-01-01
    • 2013-12-13
    • 1970-01-01
    • 2011-10-15
    • 2020-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多