Cpp/Qt
CamGuard
zamknięty:
czerwiec 2011
czerwiec 2011
zleceniodawca:
projekt autorski
Opis: projekt autorski
CamGuard jest aplikacją monitorującą pomieszczenia. Wyskakujący komunikat informuje o ewentualnym wtargnięciu intruza.
Cały algorytm oparty jest na porównaniu dwóch zdjęć. Istnieje możliwość ustawienia tolerancji dla koloru czerwonego, zielonego, niebieskiego jak i dla całego obrazu. Dzięki temu ustawiając odpowiednie parametry możemy zabezpieczyć się przed zgłoszeniem alarmu w sytuacji, gdy np. słońce wyjdzie zza chmur ;). W tej pierwszej wersji projektu złożoność algorytmu wynosi n2. Oto funkcja porównująca dwa zdjęcia i zwracająca stosunek pikseli różnych do wszystkich:
double ImageComparer::compare(QImage *image1, QImage *image2) {
int width1 = image1->width();
int width2 = image2->width();
int height1 = image1->height();
int height2 = image2->height();
int differentPixels = 0;
int pixelCounter = 0;
if( width1!=width2 || height1!=height2 ) {
if( debug ) qDebug() << "ImageComparer :: Zdjęcia są różnej wielkości.";
return 0;
}
for(int i=0; iscanLine(i);
QRgb *line2 = (QRgb *)image2->scanLine(i);
for(int z=0; z redColorTolerance ) {
differentPixels++;
continue;
}
if( abs(qGreen(*color1) - qGreen(*color2))/255. > greenColorTolerance ) {
differentPixels++;
continue;
}
if( abs(qBlue(*color1) - qBlue(*color2))/255. > blueColorTolerance ) {
differentPixels++;
continue;
}
}
}
if( debug ) {
qDebug() << "ImageComparer :: Wszystkich: "+QString::number(pixelCounter)+", różnych: "+QString::number(differentPixels)+", stosunek: "+QString::number(differentPixels*1./pixelCounter);
}
return (differentPixels*1./pixelCounter);
}



