Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用PHP检测图像中圆形的颜色_Php_Image_Hex - Fatal编程技术网

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

如何用PHP检测图像中圆形的颜色,php,image,hex,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) & 0

我需要检测圆圈是否被涂过。我试过这样做:

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>';
}
convert score.jpg -rotate 90 -blur 0x2 -threshold 50% result.png
用于($i=1;$i 16)&0xFF;
$g=($rgb>>8)和0xFF;
$b=$rgb&0xFF;
//检测黑色或白色-如何?
$y_开始-=50;
}
$x_start+=52;
$y_start=1023;
回音“-------------------------------
”; }
但尽管我不知道如何识别颜色,一些像素指向圆圈中的数字,因此它写着这个圆圈是黑色的,但事实上,它是白色的。如何解决此问题以及如何检测黑色?多谢各位

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

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

  • 然后对图像设置阈值,使其仅由纯黑白色调组成,所有值为0或255,任务将很简单

  • 在这里,我使用ImageMagick执行上述步骤,如下所示:

    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>';
    }
    
    convert score.jpg -rotate 90 -blur 0x2 -threshold 50% result.png
    

    作为第2步的替代方案,您可以使用一个小的3x3或5x5中值滤波器来填充铅笔画的圆圈中的任何孔。另一种选择可能是形态扩张来填充孔洞


    此外,还要注意那些填写了多个圆圈的学生;-)

    取决于你想投资多少能源。如果每个字段的位置都是固定的(扫描都是相同的),则无需进行位置检查(使用角落中的黑色方块),只需制作更大的样本并计算每个样本的平均颜色(样本为一个答案字段)。如果样本的平均颜色为黑色,则可能已填充。但是一些学生可能会用十字架来修正他们的答案,这样的解决方案并不完美