如何使用PHP检测图像上的圆形颜色

时间:2016-04-18 10:31:31

标签: php image hex

我需要检测是否画了圆圈。我尝试过像这样的结构:

for ($i=1; $i <= 10; $i++) { //FOR LINE
  for ($line=1; $line <= 4; $line++) { //FOR COLUMN
      $rgb = imagecolorat($img, $x_start, $y_start);
      $r = ($rgb >> 16) & 0xFF;
      $g = ($rgb >> 8) & 0xFF;
      $b = $rgb & 0xFF;
      //Detect black or white - how?
      $y_start -= 50;

  }
  $x_start += 52;
  $y_start = 1023;
  echo '-----------------------------<br>';
}

但是尽管事实上我不知道如何识别颜色,但是有些像素指向圆圈中的数字,因此它写出这个圆圈是黑色的,但实际上它是白色的。如何解决这个问题以及如何检测黑色?谢谢。

View attached file

2 个答案:

答案 0 :(得分:3)

  1. 由于没有真实的颜色信息,请先将图像转换为灰度,以简化处理。

  2. 然后稍微模糊图像,以便平滑扫描中的微小变化。

  3. 然后对图像进行阈值处理,使其仅由纯黑色和白色色调组成,所有值均为0或255,您的任务将很简单。

  4. 在这里,我使用ImageMagick执行上述步骤:

    {{1}}

    enter image description here

    作为第2步的替代方法,您可以使用小型3x3或5x5中值滤镜来填充圆圈中的任何孔。另一种选择可能是形态膨胀以填补空洞。

    另外,请注意填写多个圈子的学生; - )

答案 1 :(得分:0)

取决于您想投入多少能源。如果你固定每个字段的位置(扫描都是相同的),你不需要做一些位置检查(使用角落中的那些黑色方块),并且可以制作更大的样本并计算每个样本的平均颜色(样本)是一个答案领域)。如果样本的平均颜色是黑色,则可能是填充的。但是一些学生可能会使用cross作为修复答案的方法,然后这个解决方案并不完美。