使用Python成像确定罐中咖啡的高度

时间:2010-07-12 10:57:15

标签: python image-processing

这是一个有趣的问题,但......

我们的办公室小厨房里有一个网络摄像头,专注于我们的咖啡机。咖啡壶清晰可见。咖啡壶和相机的位置都是静态的。是否可以使用图像识别来计算罐中咖啡的高度?我已经看到图像识别用于非常复杂的东西,如面部识别。与那些项目相比,这似乎是衡量高度的一项微不足道的任务。

(这是我最好的猜测,我不知道潜在的复杂性。)

我该怎么做?这会被认为是一项非常复杂的工作吗?仅供参考,我从未做过任何与影像有关的工作。

由于

7 个答案:

答案 0 :(得分:11)

由于咖啡壶的位置是静止的,因此在一个没有反射的地方找到一个样品框并找到一个单个像素列,其中可以很容易地看到最小和最大咖啡量。检查下图中的绿色垂直线段:

http://imagepaste.nullnetwork.net/img/1278948944coffee_maker.jpg

最简单的方法是使用两个框架,一个框架为空,一个框架为满(明显在相同的光照条件下,通常情况就是如此),转换为灰度(colorsys.rgb_to_hsv每个RGB像素并仅保留v(第3个)分量,并对所选线段中所有像素的亮度求和。假设这个空罐的情况达到了550的总和,并且满罐的情况总和为220(咖啡是黑暗的)。通过将输入帧总和与这两个总和进行比较,您可以粗略估计锅中咖啡的百分比。

但是,我不打算用这种方法的准确性来赌我的生活,即使从第二到第二的波动也可能是疯狂的:)

N.B:在我的例子中,像素的绿色列应该延伸到底部;我刚才提供了一个我的意思的例子。

答案 1 :(得分:4)

我尝试的步骤:

  1. 转换grayscale中的图片。
  2. Binarize the image,只留下咖啡。您可以通过实验手动发现一个好的阈值。
  3. Blob extraction。 Blob的面积(像素数)是计算高度的一种方式,即面积/宽度。

答案 2 :(得分:2)

首先进行阈值处理,然后进行分割。然后,您可以更轻松地检测边缘。

答案 3 :(得分:1)

您正在寻找edge detection。但你只需要在咖啡的棕色/黑色和背后的背景颜色之间进行。

答案 4 :(得分:0)

Python Image Library可以进行边缘检测。但我不是Python用户:)。

答案 5 :(得分:0)

您应该将此问题转换为IT学生的学校作业。 大多数IT学校教授Computer Vision。在这里提出这个问题很有趣,让学生和老师研究这个主题会很有趣!

答案 6 :(得分:0)

  • 制作含有不同浓度咖啡的锅的照片。
  • 将图像下采样到4 * 10像素。
  • 为每个新的实时图片循环播放相同内容。
  • 计算每个像素值与参考图像的差异。
  • 获取差值最小的参考图像,然后获得咖啡机的状态。

如果灰度版本或仅红色或绿色可能会产生更好的效果,您可以进行试验。

如果它出现不同灯光设置的问题,这种方法就没用了。只需为咖啡机购买聚光灯,或者使每张照片变亮或变暗,直到所有像素的总和达到参考值。