【问题标题】:how to find orientation of a picture with delphi如何用delphi查找图片的方向
【发布时间】:2015-04-08 20:25:01
【问题描述】:

我需要找到玉米图片的方向(如下例所示),它们有不同的左右角度。我需要将它们翻转过来(与法线成 90 度角)(当它们看起来像水滴时) 有什么办法可以轻松做到吗?

【问题讨论】:

  • 这是一项相当棘手的任务。您需要搜索库,或自己编写代码。后者需要很多专业知识。
  • 好问题。错误的论坛。
  • 正如@DavidHeffernan 悲伤的那样,这远非微不足道的任务。有计算机科学家为此花费了数年时间研究各种算法。现在,如果所有图片都有单色背景,您可能会使用基本的形状识别算法,但我不知道任何 Pascal 实现。简而言之,如果您要编辑的图片数量不多,并且在您的软件中实现这样的功能不是一件麻烦事,那么您自己编辑这些图片的方向可能会更快。

标签: delphi image-processing face-recognition


【解决方案1】:

从 OP 我觉得你在这方面是个菜鸟,所以我坚持做一些简单的事情:

  1. 计算图像的边界框

    足够简单地遍历所有像素并记住非背景像素的x,y 坐标中的min,max

  2. 计算关键尺寸

    只需通过边界框投射几行即可计算红点位置。所以选择起点我选择25%,50%,75%的高度。首先从左侧开始并在第一个非背景像素处停止。然后从右边开始,在第一个非背景像素处停止。

  3. 轴对齐位置

    开始旋转图像,记住/停止红点对称的位置,因此它们与左右的距离几乎相同。此外,边界框在轴对齐位置具有最大高度和最小宽度,因此您也可以利用它来代替 ...

  4. 确定位置

    如果我拨打距离l0,l1,l2,r0,r1,r2,您有 4 个选项

    • l 表示左起,r 表示右起
    • 0 是上(蓝色)线,1 中间,2 底部

    那么你想要的位置是如果(l0==r0)>=(l1==r1)>=(l2==r2) 和边界框在y 轴然后在x 轴更大,所以旋转90 度直到找到匹配或直接从距离确定方向并旋转一次...

[备注]

您将需要访问图像的像素,因此我强烈建议您使用 VCL 中的Graphics::TBitmap。看这里gfx in C 特别是 GDI 位图 部分和这个finding horizon on high altitude photo 可能会有所帮助。

我使用 C++VCL 所以你必须翻译成 PascalVCL 的东西是一样的...

【讨论】:

  • 非常感谢,但问题不是所有的鸡眼都是对称的 :(
  • 然后在旋转时使用边界框条件,这也适用于不对称形状,...然后只需选择上侧较薄的位置。
【解决方案2】:

作为起点 - 找到 image moments(以及梨等复杂形式的 Hu 矩)。从链接:

Information about image orientation can be derived by first using the 
second order central moments to construct a covariance matrix.

我怀疑像 OpenCV 这样的图像处理库的使用可以在常见情况下提供更可靠的结果

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-27
    • 1970-01-01
    • 2012-09-17
    • 2010-11-16
    • 2011-01-18
    • 2017-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多