我的作业是写一个非常简单的应用程序(Java或C#,我知道两者),它可以检测图片中一杯水/焦炭的水位(它必须在那里画一条线)。我甚至不知道如何开始它。我整天用谷歌搜索,但没有找到有用的结果。有没有好的算法,可以检测液体的水平?
照片是从侧面拍摄的,如下:
(如果检测到两条线也很好)。你能帮我解决一下如何开始吗?使用egde检测(有没有任何好的基本算法?),或其他方法?
如果它能检测到水,焦炭和每种液体等,那将是最好的....
答案 0 :(得分:6)
你将不得不做一些边缘检测,然后一旦你有边缘,尝试找到玻璃内的水平。您可以使用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;
产生如下图像:
现在应该更容易找到玻璃杯中的水点。由于已消除了所有背景噪音,因此您可以专注于确定应关键的边缘。
答案 1 :(得分:0)
检查Hough变换here
答案 2 :(得分:0)
它将帮助您获得相关玻璃的容量。
一旦你知道玻璃杯可容纳多少水,就可以使用自己编写的功能在图像上画两条线。我建议一条线用于玻璃尺寸,一条线用于水平超强的图像,然后你可以使用这些线和玻璃的最大容量来形成两者之间的相关性并计算其中所含的液体水平玻璃。
请记住,您的教授对您的任务100%正确并不感兴趣,他们更有兴趣为您准备好主动解决问题。 Google搜索无法始终解决您的问题。