我正在尝试检测图像中的地平线,并返回天空的遮罩(或倒置为地面)。虽然它似乎有很多用途,但我正在努力找到一个好的解决方案。更糟糕的是,这似乎是一个如此简单的问题,大多数人在探测地平线方面没有任何问题。
以下更难:
我现在尝试的是使用滤色器将其限制为低饱和度,然后找到轮廓并检测并填充最大轮廓。在此之后,我将洪水填充到轮廓上方的区域。这确实有效,但我仍然无法想象这个问题是如此困难。
我正在使用OpenCV包装器在Delphi XE8中编写代码,但欢迎任何其他语言的答案或想法!
答案 0 :(得分:1)
根据我的理解,你正在寻找一条水平线 - 如果存在的话 - 将独家天空部分与其余部分分开。
我会逐行计算图像统计数据,所以水平直方图或与之类似。
它甚至可以基于全球门槛或定制的天空'功能。如果像素是天空或不是天空,则以某种方式决定(强度,色调)并在扫描线内计算它们。
然后水平地对齐一半图像,对两个部分的行值求和,并确定你的“水平线”的方向。应该被移动。这部分也是一半,直到你到达正确的行。通过这样的二分搜索,您应该能够提取哪条线将天空与前景分开。如果它是第一行:没有天空,如果是最后一个:全天。
这个问题肯定有其他方法,所以我期待看到更多的建议。
答案 1 :(得分:1)
我的回答完全不同。您可以将OpenCV与磁罗盘连接起来,将天空与地面分开。
您可以在OpenCV中使用iOS执行此操作。将您的OpenCV项目与iPhone中的指南针链接。然后将天空与地面分开,就像指南针App那样做。
答案 2 :(得分:0)
您可以尝试卷积深度神经网络,例如http://mi.eng.cam.ac.uk/projects/segnet/,或者训练您自己的类似网络。