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

标签 c# java image algorithm

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

照片是从侧面拍的,像这样:

enter image description here

(如果它检测到两条线也很好)。那么你能帮我看看如何开始吗?使用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;

生成这样的图像:

enter image description here

现在应该更容易找到玻璃杯中的水点了。由于所有背景噪音都已消除,您可以集中精力确定应该切断的边缘。

关于c# - 如何检测图像上的水位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10607807/

相关文章:

css - 我网站上某些图片的分辨率太低

php - 在 SSL 中如何优雅地处理重定向到 http 的 https URL 的 IMG src

c# - 是否可以设置 Entity Framework 提供程序将执行的实际 SQL?

c# - C 如何断言该结构不等于 0?

c# - 如何为 TextBox 实现良好且高效的撤消/重做功能

java - 如何快速将 BufferedImage 转换为 byte[]?

Java 图标图像最大文件大小

javascript - 在重定向到其他页面 ASP.NET 之前显示警报消息

java - 正则表达式,匹配特定XML标签的内容,但不包含标签本身

java - 将两个字符串与新行合并