我正在开发一个 PHP 图像处理库,该库处理来自游戏的渲染图像,在 PHP 网络主机上进行处理。为了处理图像,我需要找到红色岛屿(色调在 x 0 或 360 的范围内),并在其中找到一个点(不一定是中心,但最好靠近中心)。大约有 100 个这样的岛屿,大小不一。它们是梯形或接近梯形。由于图像是 PNG,并且未压缩且没有抗锯齿,因此边缘清晰到像素,但某些区域可能比其他区域更暗。
目前,我尝试imagecolorat(
在 GD 中使用并在转换后测试 HSV 值,然后尝试围绕它的点,直到我到达非红色像素,但该过程似乎需要一些时间才能完成,并且似乎遇到 PHP 超时到 5 秒的限制,如果我正在处理一个大图像。有没有更有效的方法来检测所述岛屿并获得一个不一定在中心的点,但最好在附近?
我也尝试过,我知道梯形的大小,假设没有人进入一定的距离并跳过该距离以节省时间。
我不一定需要代码,只需要一个指向正确方向的指针。
我当前的代码:
function RGBToHSL($RGB) {
$r = 0xFF & ($RGB >> 0x10);
$g = 0xFF & ($RGB >> 0x8);
//截图 }
$image=imagecreatefrompng($filename);
$redislands=[];
for($xpos=0; $xpos<=imagesx($image); $xpos++){
for($ypos=0; $ypos<=imagesy($image); $ypos++){
if (RGBToHSL(imagecolorat(xpos, ypos)->saturation<=20||RGBToHSL(imagecolorat(xpos, ypos)->saturation>=350){
$redislands[]=[xpos, ypos]
}
}
}