zum Spielen mit Farb- u. Grautönen:
//Einstellungen in px - Oben-Links ist 0,0
$homeX = 470; // 470 g / b 350 / 230 / 110
$homeY = 350; // 160
$homeRadius = 50;
$offset = 20; // 0 bis 255 Helligkeit / Alamrschwelle
//Zum Testen der X,Y,Radion Angaben auf true setzen und Bild hinerher angucken
//$debug= False;
$debug = True;
$remoteImage = IPS_GetKernelDir()."webcam_snapshot.jpg";
$localImage = IPS_GetKernelDir()."cam2_mod.gif";
$remoteFile = fopen("$remoteImage",'rb');
$localFile = fopen($localImage,'wb');
if(!$remoteFile || !$localFile) {
exit; //Error erzeugen!
}
while (!feof($remoteFile)) {
$chunk = fread($remoteFile,1024);
fwrite($localFile,$chunk);
}
fclose($localFile);
fclose($remoteFile);
$im = ImageCreateFromJPEG ($localImage);
$schwarz = ImageColorAllocate ($im, 0, 0, 0);
$rot = ImageColorAllocate ($im, 255, 0, 0);
$gelb = ImageColorAllocate ($im, 255, 255, 0);
$blau = ImageColorAllocate ($im, 0, 0, 255);
$grayold = GetValueInteger("WebCam_gray_old"); // Wert "holen"
$color = 0;
$red_sum = 0;
$green_sum = 0;
$blue_sum = 0;
$pixel = 0;
for($x=$homeX-$homeRadius; $x<=$homeX+$homeRadius; $x++) {
for($y=$homeY-$homeRadius; $y<=$homeY+$homeRadius; $y++) {
$color = imagecolorat($im, $x, $y);
$blue = 0x0000ff & $color;
$green = 0x00ff00 & $color;
$green = $green >> 8;
$red =0xff0000 & $color;
$red = $red >> 16;
$gray_pix = ($red + $green + $blue) /3;
$red_sum = $red_sum + $red;
$green_sum = $green_sum + $green;
$blue_sum = $blue_sum + $blue;
$pixel = $pixel +1;
if($gray_pix > 254) {
//imagerectangle($im, $homeX-$homeRadius, $homeY-$homeRadius, $homeX+$homeRadius, $homeY+$homeRadius, $rot);
imagesetpixel($im, $x, $y, $blau);
// imagegif($im, $localImage);
}
}
}
$red_mittel = $red_sum / $pixel;
$green_mittel = $green_sum / $pixel;
$blue_mittel = $blue_sum / $pixel;
$gray = ($red_mittel + $green_mittel + $blue_mittel) /3;
echo "Rot : $red
";
echo "Rot_Summe : $red_sum
";
echo "Rot_Mittel : $red_mittel
";
echo "Grün : $green
";
echo "Grün_Summe : $green_sum
";
echo "Grüen_Mittel : $green_mittel
";
echo "Blau : $blue
";
echo "Blau_Summe : $blue_sum
";
echo "Blau_Mittel : $blue_mittel
";
echo "Pixel : $pixel
";
echo "Grau-Wert : $gray
";
$schwelle = 5;
SetValueInteger("WebCam_Color_Detect", 0);
if(($red_mittel > $green_mittel + $schwelle) and ($red_sum > $blue_mittel + $schwelle)) {
SetValueInteger("WebCam_Color_Detect", 1);
}
if(($green_mittel > $red_mittel+ $schwelle) and ($green_mittel > $blue_mittel + $schwelle)) {
SetValueInteger("WebCam_Color_Detect", 2);
}
if(($blue_mittel > $red_mittel+ $schwelle) and ($blue_mittel > $green_mittel + $schwelle)) {
SetValueInteger("WebCam_Color_Detect", 3);
}
$gray = (int)$gray;
SetValueInteger("WebCam_gray_old", $gray); // Wert "merken"
if($debug) {
imagerectangle($im, $homeX-$homeRadius, $homeY-$homeRadius, $homeX+$homeRadius, $homeY+$homeRadius, $gelb);
imagesetpixel($im, $homeX, $homeY, $gelb);
imagegif($im, $localImage);
}
imagedestroy($im);