mask.cpp 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. #include "mask.h"
  2. #include <QDebug>
  3. #include <QPixmap>
  4. #include <QBitmap>
  5. Mask::Mask( QString p )
  6. : path( p ),
  7. mask( 0 )
  8. {}
  9. Mask::~Mask()
  10. {
  11. unloadMask();
  12. }
  13. // Lädt das Masken Bild
  14. void Mask::loadMask()
  15. {
  16. if( !mask )
  17. {
  18. mask = new QImage( path );
  19. }
  20. }
  21. // Gibt das Maskenbild zurück
  22. QImage *Mask::getMask()
  23. {
  24. return mask;
  25. }
  26. // Gibt ein Bild zurück, indem der Weiße Teil transparent ist
  27. QPixmap Mask::getDrawableImage()
  28. {
  29. QPixmap mp( path );
  30. mp.setMask( mp.createMaskFromColor( QColor( 0, 0, 0 ), Qt::MaskOutColor ) );
  31. return mp;
  32. }
  33. // Prüft, ob ein Polygon im verbotenen Bereich liegt
  34. bool Mask::isPolygonInside( QPolygon p )
  35. {
  36. loadMask();
  37. int pCount = p.count();
  38. for( int i = 0; i< pCount; i++ )
  39. {
  40. if( mask->pixel( p.at( i ).x(), p.at( i ).y() ) != 0xFF000000 )
  41. return true;
  42. }
  43. return false;
  44. }
  45. // Erstellt eine neue Maske
  46. void Mask::createMask( QSize s )
  47. {
  48. if( mask )
  49. delete mask;
  50. mask = new QImage( s, QImage::Format_RGB32 );
  51. mask->fill( Qt::white );
  52. }
  53. // Speichert die Maske
  54. void Mask::save() const
  55. {
  56. mask->save( path );
  57. }
  58. // Erzeugt für ein Bild das JPEGImage bild
  59. // img: Das Bild zu dem das JPEGImage generiert werden soll
  60. // frameName: Der Name des Bildes
  61. void Mask::saveToFrameMask( cv::Mat img, QString frameName ) const
  62. {
  63. cv::Mat result;
  64. cv::Mat mask = cv::imread( path.toStdString() );
  65. cv::bitwise_and( img, mask, result );
  66. qDebug() << path.mid( 0, path.lastIndexOf( "/", path.lastIndexOf( "/" ) - 1 ) + 1 ) + "JPEGImages/" + frameName;
  67. cv::imwrite( (path.mid( 0, path.lastIndexOf( "/", path.lastIndexOf( "/" ) - 1 ) + 1 ) + "JPEGImages/" + frameName).toStdString(), result );
  68. }
  69. // Löscht die Maske aus dem Speicher
  70. void Mask::unloadMask()
  71. {
  72. delete mask;
  73. mask = 0;
  74. }