C# 如何检测图像上的水位?

C# 如何检测图像上的水位?,c#,java,image,algorithm,C#,Java,Image,Algorithm,我的作业是编写一个非常简单的应用程序(Java或C#,我都知道),它可以检测图片中一杯水/可乐的水位(它必须在那里画一条线)。我甚至不知道怎么开始。我搜索了一整天,但没有找到有用的结果。有什么好的算法可以检测液体的液位吗 照片是从侧面拍摄的,如下所示: (如果它同时检测到两条线也很好)。那么你能帮我从哪里开始吗?使用egde检测(有没有好的基本算法?)或其他方法 如果它能检测到水、焦炭和每一种液体等,那将是最好的…检查霍夫变换检查霍夫变换它将帮助您获得相关玻璃的容量 一旦你知道一个玻璃杯能容纳

我的作业是编写一个非常简单的应用程序(Java或C#,我都知道),它可以检测图片中一杯水/可乐的水位(它必须在那里画一条线)。我甚至不知道怎么开始。我搜索了一整天,但没有找到有用的结果。有什么好的算法可以检测液体的液位吗

照片是从侧面拍摄的,如下所示:

(如果它同时检测到两条线也很好)。那么你能帮我从哪里开始吗?使用egde检测(有没有好的基本算法?)或其他方法


如果它能检测到水、焦炭和每一种液体等,那将是最好的…

检查霍夫变换

检查霍夫变换

它将帮助您获得相关玻璃的容量

一旦你知道一个玻璃杯能容纳多少水,你就可以使用你自己编写的函数在图像上画两条线。我建议用一条线表示玻璃尺寸,用一条线表示施加在图像上方的水位,然后你可以使用这些线和玻璃的最大容量来形成两者之间的相关性,并计算玻璃中所含的液体液位


记住,你的教授对你的作业100%正确不感兴趣,他们更感兴趣的是让你准备好用自己的主动性解决问题。谷歌搜索并不能总是解决你的问题。

它将帮助你获得有关玻璃的容量

一旦你知道一个玻璃杯能容纳多少水,你就可以使用你自己编写的函数在图像上画两条线。我建议用一条线表示玻璃尺寸,用一条线表示施加在图像上方的水位,然后你可以使用这些线和玻璃的最大容量来形成两者之间的相关性,并计算玻璃中所含的液体液位


记住,你的教授对你的作业100%正确不感兴趣,他们更感兴趣的是让你准备好用自己的主动性解决问题。谷歌搜索并不能总是解决你的问题。

你必须做一些边缘检测,一旦你有了边缘,试着在玻璃中找到水平面。你可以使用像这样的工具箱。然后,检测边缘的代码非常简单,例如:

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;
生成如下图像:


现在应该更容易找到杯子里的水点了。由于所有背景噪声都已消除,因此您可以集中精力确定应在哪个边缘上设置关键点。

您必须进行一些边缘检测,然后在获得边缘后,尝试在玻璃内找到标高。你可以使用像这样的工具箱。然后,检测边缘的代码非常简单,例如:

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;
生成如下图像:


现在应该更容易找到杯子里的水点了。由于所有背景噪声都已消除,因此您可以集中精力确定应在哪个边缘上设置关键帧。

您打算如何检测它?有了浮子,天平,一些光学元件?“非常简单的应用”在你找到一个可行的解决方案之前,你怎么知道它有多困难或简单?“那么你能帮我开始吗?”阅读你的课文,咨询你的导师,这就是他们在那里的目的。这是计算机图形学/计算机视觉入门课程的难点?到目前为止,您讨论了哪些算法/技术?安德鲁·汤姆斯彭说得对。如果这是一门课程的作业,助教知道什么会让你的教授高兴,与他们或你的教授谈谈寻求帮助。如果你决定做你自己的“功能性”实现,它仍然可能不是教授想要的。你打算如何检测它?有了浮子,天平,一些光学元件?“非常简单的应用”在你找到一个可行的解决方案之前,你怎么知道它有多困难或简单?“那么你能帮我开始吗?”阅读你的课文,咨询你的导师,这就是他们在那里的目的。这是计算机图形学/计算机视觉入门课程的难点?到目前为止,您讨论了哪些算法/技术?安德鲁·汤姆斯彭说得对。如果这是一门课程的作业,助教知道什么会让你的教授高兴,与他们或你的教授谈谈寻求帮助。如果您决定执行自己的“功能性”实现,它可能仍然不是教授想要的。