frame.h 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. #ifndef FRAME_H
  2. #define FRAME_H
  3. #include <QString>
  4. #include <QPolygon>
  5. #include "object.h"
  6. #include "mask.h"
  7. #include "frametree.h"
  8. #include "opencv2/opencv.hpp"
  9. class Kamera;
  10. /*
  11. * Verwaltet ein Bild einer Sequenz
  12. */
  13. class Frame : public FrameTreeNode
  14. {
  15. private:
  16. QString path; // Der Pfad zum Bild
  17. QList<ObjectPolygon> objects; // Eine Liste mit Annotierten Objekten
  18. QString timestamp; // Der Zeitpunkt, zu dem das Bild aufgenommen wurde
  19. QSize size; // Die Größe des Bildes
  20. bool needAnnotation; // 1, falls das Bild noch nicht vom Nutzer annotiert wurde
  21. bool needSave; // 1, falls die Annotationen auf dem Bild seit dem letzten Speichern verändert wurden
  22. public:
  23. // Erstellt das Bild
  24. // imgPath: Der Pfad zu dem Quellbild
  25. // timestamp: Der Zeitpunkt der Aufnahme des Bildes
  26. // index: Der Index des Bildes in der Liste aller Bilder der Kamera
  27. // kam: Die Kamera, die das Bild aufgenommen hat
  28. // needAnnotation: true, falls das Bild noch nicht annotiert wurde
  29. Frame(QString imgPath,
  30. QString timestamp,
  31. int index,
  32. Kamera *kam,
  33. bool needAnnotation);
  34. ~Frame();
  35. // Legt fest, dass das Bild seit dem letzten speichern verändert wurde
  36. void setNeedSave();
  37. // Gibt this zurück
  38. void* getNodeObject() const override;
  39. // Gibt die Anzahl aller Objekte auf dem Bild zurück
  40. int getChildCount() const override;
  41. // Entfernt alle Eckpunkte in einem Gebit
  42. // area: Das Gebiet, in dem die Eckpunkte gelöscht werden sollen
  43. void removeSelectedVertices(QRect area);
  44. // Löscht ein bestimmtes Objekt
  45. // o: Das Objekt, welches gelöscht werden soll
  46. void removeObject(ObjectPolygon o);
  47. // Fügt ein Objekt zu dem Bild hinzu. Das Objekt wird automatisch am
  48. // Bildrand abgeschnitten
  49. // name: Die ID des Objektes
  50. // truncated: true, falls das Objekt abgeschnitten ist
  51. // po: Eine Liste mit Polygonen, welche die Umrisse des Objektes sind
  52. void addObject(QString name,
  53. bool truncated,
  54. QList<QPolygon>po);
  55. // Wendet die Maske auf das Bild an und löscht alle Objekte, welche sich in
  56. // verbotenen Bereichen befinden
  57. // m: die Maske
  58. void applyMask(Mask& m);
  59. // Spaltet ein Objekt in zwei Teile
  60. // object: Das Objekt welches zerteilt werden soll
  61. // beginn: Der Index des Start Eckpunktes
  62. // end: Der Index des End Eckpunktes
  63. // pIndex: Der Index des Polygons, welches zerteilt werden soll
  64. void splitObject(ObjectPolygon object,
  65. int begin,
  66. int end,
  67. int pIndex);
  68. // gibt den Namen des Bildes zurück
  69. QString getName() const;
  70. // Gibt den Aufnahmezeitpunkt des Bildes zurück
  71. QString getTimestamp() const;
  72. // Gibt eine Liste mit Objekten zurück, welche sich auf dem Bild befinden
  73. QList<ObjectPolygon>& getObjects();
  74. // Setzt die Objekte, welche sich auf dem Bild befinden. Alle vorherigen
  75. // Objekte werden entfernt.
  76. // objects: die Liste mit den neuen Objekten
  77. void setObjects(std::vector<std::vector<cv::Point> >objects);
  78. // Gibt das geladene Bild als Objekt des Qt Frameworks zurück
  79. QImage getImage();
  80. // Gibt das geladene Bild als Objekt der OpenCV Bibliotek zurück
  81. cv::Mat getImageMatrix() const;
  82. // Gibt den Bildausschnitt zurück, auf dem ein Objekt komplett sichtbar ist
  83. // objectId: die ID des Objektes, welches auf dem Bild sein soll
  84. QImage getObjectImage(QString objectId);
  85. // Gibt den Bildausschnitt zurück, auf dem ein Objekt komplett sichtbar ist
  86. // object: das Objekt, welches auf dem Bild sein soll
  87. QImage getObjectImage(ObjectPolygon object);
  88. // Prüft ob ein Objekt auf dem Bild vorhanden ist
  89. // id: Die ID des Objektes
  90. bool hasObject(QString id);
  91. // Gibt true zurück, falls kein Fehler in der Annotation des Bildes gefunden
  92. // wurde
  93. bool isCorrectAnnotated() const;
  94. // Gibt true zurück, falls das Bild noch nicht annotiert wurde
  95. bool isNotAnnotated() const;
  96. // Gibt das Objekt zurück, welches an einer bestimmten Position im Bild ist.
  97. // 0 falls an der Stelle kein Objekt ist
  98. // pos: die Position, an der ein Objekt gesucht werden soll
  99. // pIndex: wird auf den Index des Polygons gesetzt, welches an der Stelle
  100. // ist, falls dort ein Objekt existiert
  101. ObjectPolygon getObjectAt(QPoint pos,
  102. int & pIndex) const;
  103. // Setzt das Objekt an einer bestimmten Position im Bild.
  104. // Fals an der Position bereits ein Objekt existiert, so wird nur die Objekt
  105. // ID gesetzt.
  106. // pos: die Position
  107. // object: Das neue Objekt
  108. // center: Der Mittelpunkt des neuen Objektes
  109. // rotation: Die Drehung des neuen Objektes um den Mittelpunkt
  110. void setObjectAt(QPoint pos,
  111. ObjectPolygon object,
  112. QPoint center = QPoint(0, 0),
  113. float rotation = 0);
  114. // Macht ein Objekt an einer bestimmten Stelle sichtbar oder unsichtbar
  115. // pos: Die Position
  116. void selectObjectAt(QPoint pos);
  117. // Schneidet ein Polygon am rand des Bildes ab und gibt das Ergebnis zurück
  118. // uncliped: Das nicht abgeschnittene Polygon
  119. QPolygon clipPolygon(QPolygon uncliped) const;
  120. // Vereiniegt verschiedene Objekte mit der gleichen Objekt ID zu einem
  121. // id: Die ID, deren Objekte vereiniegt werden sollen
  122. void connectObjects(QString id);
  123. // Zerteilt ein Objekt, welches aus mehreren Polygonen besteht
  124. // o: Das Objekt welches zerteilt werden soll
  125. void disconnectObject( ObjectPolygon o );
  126. // Gibt 1 zurück, falls die Annotation zu dem Bild gespeichert werden muss
  127. // und setzt den Flag auf 0, so dass erst nach einer änderung wieder 1 zurückgegeben wird
  128. bool wasChangedSinceLastSave();
  129. };
  130. #endif // FRAME_H