如何用delphi找到图片的方向

时间:2015-02-09 06:28:28

标签: delphi image-processing face-recognition

我需要找到玉米图片的方向(如下例所示),它们有不同的角度向右或向左。我需要将它们向上倾斜(与正常角度成90度角)(当它们看起来像水滴时) 有什么方法可以轻松完成吗?

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:2)

从OP中我得到了一个新人的印象,所以我坚持一些简单的事情:

  1. 计算图像的边界框

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

  2. 计算关键尺寸

    enter image description here

    只需在边界框中投射几条线来计算红点位置。因此,选择我选择高度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度直到找到匹配或确定直接从距离方向定位并只旋转一次......

  5. <强> [注释]

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

    我使用 C ++ VCL ,因此您必须转换为 Pascal ,但 VCL 的内容是相同的...

答案 1 :(得分:2)

作为起点 - 找到image moments(和像梨一样复杂形式的胡子时刻)。从链接:

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

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