我的作业是编写一个非常简单的应用程序(Java 或 C#,我都知道),它可以检测图片中一杯水/可乐的水位(它必须在那里画一条线)。我什至不知道如何开始。我用谷歌搜索了一整天,但没有找到有用的结果。有什么好的算法可以检测液位吗?
照片是从侧面拍的,像这样:
(如果它检测到两条线也很好)。那么你能帮我看看如何开始吗?使用 egde 检测(有没有好的基本算法?),或其他方法?
如果它能检测到水、焦炭和每一种液体等,那将是最好的……
你将不得不做一些边缘检测,然后一旦你有了边缘,试着找到玻璃内的水平。您可以使用像Aforge.NET这样的工具包。然后检测边缘的代码非常简单,例如:
Bitmap b = new Bitmap(Image.FromFile(@"C:\Temp\water.jpg"));
// create filter
Edges filter = new Edges();
// apply the filter
filter.ApplyInPlace(b);
pictureBox1.Image = b;
产生这样的图像:
现在应该更容易找到玻璃杯中的水点。由于所有背景噪音都已消除,您可以专注于确定您应该关闭哪个边缘。
它将帮助您获得相关玻璃的容量。
一旦您知道玻璃杯可以容纳多少水,您就可以使用您自己编写的函数在图像上画两条线。我建议用一条线表示玻璃尺寸,另一条线表示叠加在图像上的水位线,然后您可以使用这些线和玻璃的最大容量来形成两者之间的相关性并计算其中包含的液位玻璃。
请记住,您的教授对您获得 100% 正确的作业并不感兴趣,他们更感兴趣的是让您准备好用自己的主动性解决问题。谷歌搜索并不总能解决您的问题。
在此处检查霍夫变换