#include "mask.h" #include #include #include Mask::Mask( QString p ) : path( p ), mask( 0 ) {} Mask::~Mask() { unloadMask(); } // Lädt das Masken Bild void Mask::loadMask() { if( !mask ) { mask = new QImage( path ); } } // Gibt das Maskenbild zurück QImage *Mask::getMask() { return mask; } // Gibt ein Bild zurück, indem der Weiße Teil transparent ist QPixmap Mask::getDrawableImage() { QPixmap mp( path ); mp.setMask( mp.createMaskFromColor( QColor( 0, 0, 0 ), Qt::MaskOutColor ) ); return mp; } // Prüft, ob ein Polygon im verbotenen Bereich liegt bool Mask::isPolygonInside( QPolygon p ) { loadMask(); int pCount = p.count(); for( int i = 0; i< pCount; i++ ) { if( mask->pixel( p.at( i ).x(), p.at( i ).y() ) != 0xFF000000 ) return true; } return false; } // Erstellt eine neue Maske void Mask::createMask( QSize s ) { if( mask ) delete mask; mask = new QImage( s, QImage::Format_RGB32 ); mask->fill( Qt::white ); } // Speichert die Maske void Mask::save() const { mask->save( path ); } // Erzeugt für ein Bild das JPEGImage bild // img: Das Bild zu dem das JPEGImage generiert werden soll // frameName: Der Name des Bildes void Mask::saveToFrameMask( cv::Mat img, QString frameName ) const { cv::Mat result; cv::Mat mask = cv::imread( path.toStdString() ); cv::bitwise_and( img, mask, result ); qDebug() << path.mid( 0, path.lastIndexOf( "/", path.lastIndexOf( "/" ) - 1 ) + 1 ) + "JPEGImages/" + frameName; cv::imwrite( (path.mid( 0, path.lastIndexOf( "/", path.lastIndexOf( "/" ) - 1 ) + 1 ) + "JPEGImages/" + frameName).toStdString(), result ); } // Löscht die Maske aus dem Speicher void Mask::unloadMask() { delete mask; mask = 0; }