我需要找到玉米图片的方向(如下例所示),它们有不同的角度向右或向左。我需要将它们向上倾斜(与正常角度成90度角)(当它们看起来像水滴时) 有什么方法可以轻松完成吗?
答案 0 :(得分:2)
从OP中我得到了一个新人的印象,所以我坚持一些简单的事情:
计算图像的边界框
很简单,遍历所有像素并记住min,max
非背景像素的x,y
坐标
计算关键尺寸
只需在边界框中投射几条线来计算红点位置。因此,选择我选择高度25%,50%,75%
的起点。首先从左侧开始并在第一个非背景像素上停止。然后从右边开始,在第一个非背景像素上停止。
轴对齐位置
开始旋转图像时,请记住/停止红点对称的位置,这样它们从左侧和右侧的距离几乎相同。此外,边界框在轴对齐位置具有最大高度和最小宽度,因此您也可以利用它...
确定位置
如果我拨打距离l0,l1,l2,r0,r1,r2
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 ,因此您必须转换为 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这样的图像处理库可以在常见情况下提供更可靠的结果