Buongiorno a tutti
Io fotografo dei libri su un tavolo bianco. Intorno al libro c'è sempre quindi del bianco
poi scatto una foto completamente nera
e passo al libro successivo.
La foto nera mi serve per separare i libri
Si tratta quindi di riconoscere la foto nera.
Prendo l'rbg dei punti estremi dei 4 lati che sicuramente sono bianchi (prossimamente a 255/255/255/255) al contrario di una foto nera che è poco più di 0/0/0/0/
(Tra l'altro ho scoperto con questa roba che il nero assoluto non esiste... per quello che all'inizio cercavo lo 0 e non lo ottenevo mai...)
Il programma che ho scritto funziona sì, ma su 700 foto ad esempio impiega parecchi minuti.
Per velocizzare un po' di più faccio prima un controllo sul pixel dell'angolo in basso a destra che è sempre bianco, o comunque mai scuro, se lo vede bianco allora salta il ciclo e passa all'altro.
In tutta sincerità non so, sempre se fa, renderlo più veloce.
è tutto il giorno che guardo il manuale su queste funzioni
(l'echo non è importante, mi interesserebbe solo la velocità di calcolo perché di visuale non deve avere nulla)
ini_set('memory_limit', '-1');
$percorso = $_SERVER["DOCUMENT_ROOT"]."/FOTO_PROVA_NERO2/";
$array_file = array_diff(scandir($percorso), array('..', '.'));
natsort($array_file);
foreach($array_file as $nome_file){
$dimensioni_foto = getimagesize($percorso."/".$nome_file);
$foto = imagecreatefromjpeg($percorso."/".$nome_file);
$RGB_maxmax = imagecolorsforindex($foto, imagecolorat($foto, $dimensioni_foto[0]-1, $dimensioni_foto[1]-1));
if(($RGB_maxmax["red"]+$RGB_maxmax["green"]+$RGB_maxmax["blue"])>100){
continue;
}else{
$RGB_00 = imagecolorsforindex($foto, imagecolorat($foto, 0, 0));
$RGB_max0 = imagecolorsforindex($foto, imagecolorat($foto, $dimensioni_foto[0]-1, 0));
$RGB_0_max = imagecolorsforindex($foto, imagecolorat($foto, 0, $dimensioni_foto[1]-1));
$res = $RGB_00["red"]+$RGB_00["green"]+$RGB_00["blue"]+
$RGB_max0["red"]+$RGB_max0["green"]+$RGB_max0["blue"]+
$RGB_0_max["red"]+$RGB_0_max["green"]+$RGB_0_max["blue"]+
$RGB_maxmax["red"]+$RGB_maxmax["green"]+$RGB_maxmax["blue"];
if($res<100){
echo "La foto è nera";
}
}
}