利用OpenCV和Python精确定位水域边缘

2024-05-03 01:17:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在尝试使用OpenCV/Python检测水的边缘,得到的结果相当不准确,也没有健壮性。 这就是我目前所取得的成就: Original Image, output image

Canny Edge detection

我目前正在做的是设置一些变量(高斯模糊的水平,用于Canny边缘检测的sigma,以及测量的水平在每个点之间可以改变的最大偏差),执行“自动”Canny边缘检测(测量中值像素强度并用于形成上下边界),然后从左下角向上移动以找到第一个“白色”像素。这是在整个帧长度的x间隔内完成的。在

点的平均y值是计算出来的。然后测试每个点,看它是否偏离平均像素太远,偏差限制在前面设置。剩下的点在图像上绘制为蓝线。在每一帧记录绘制像素的平均值。在

在30帧之后,计算平均值的平均值并绘制为红线,然后假设其为“真实”水面高度。在

有人有什么更好的办法吗?什么能让水边更突出?这种方法对我所记录的大多数镜头都有效,但效果不佳。在

提前谢谢。在


Tags: imageoutput记录水平绘制像素opencv边缘
1条回答
网友
1楼 · 发布于 2024-05-03 01:17:10

我也曾研究过类似的问题,希望这些建议能对您有所帮助:

  • 尽量限制搜索范围:您能假设水位应该在哪里吗?还应考虑已正确检测到水位。在接下来的几帧中,水位会不断下降/上升,这是否安全?它会慢慢改变吗?裁剪图像,以便只考虑可以安全地假定存在水位的区域。在
  • 更改颜色空间:您可以尝试在其他颜色空间(如HSV)中工作,以便将亮度与色度分开
  • Hough Transform line detection:尝试使用此算法搜索图像中的特定水平线或其他形状。在
  • 图像不失真:如有必要,尝试校正图像以校正曲线,或使用反向透视映射(IPM)取消透视。在

也可以考虑改变边缘检测算法。在

相关问题 更多 >