0

我正在尝试研究可以检测上传的照片是否具有纯背景的东西。我imagecolorat()在一个地方使用随机样本点。上传的照片是标准的特写肩平照片。我正在检查图像某些位置的像素颜色 - 背景中靠近(人的)耳朵区域的某处。

根据 的结果imagecolorat(),我能够得到点的 RGB 颜色。然后我将它们转换为 HSV。

我将如何确定颜色是否相似?由于照片可能不一定具有样本像素上的确切颜色,因此我需要设置一些容差水平以允许相似的颜色。例如,#3A34B9应该#524EB4没问题,因为它们都是蓝色的,具有不同的 HSV 值,但彼此靠近。

我应该在 HSV 值中检查什么?有时灰色物体的 HUE 非常明显,它们仍然是灰色的,应该通过测试。

我现在没有发布任何代码,因为它不是我遇到问题的代码,而是关于如何正确确定哪些照片具有纯背景的算法。

这并不是真正的面部检测,我想知道 PHP 是否可以做到这一点,但也知道如何改进上传照片中的样本点会有所帮助。目前,我只将照片划分为区域并从特定区域(大约 1/6 和 5/6 x 轴以及 1/3 y 轴)获取点。

4

1 回答 1

0

为什么不比较 RGB 值而不是将它们转换为 HSV?您可以通过位移和屏蔽 imagecolorat() 的结果来获得单独的“R”、“G”和“B”值。一旦你得到这些值,就很容易将它们与测试颜色的 rgb 值进行比较。我也不容易建立某种容差,因为每个 rgb 的范围都在 0-255 之间。您可以轻松定义 R、G 和 B 值与测试颜色的差异程度。

来自 php 手册 imagecolorat()

<?php
$im = imagecreatefrompng("php.png");
$rgb = imagecolorat($im, 10, 15);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;

var_dump($r, $g, $b);
?>
于 2012-11-28T16:24:59.447 回答