frame.h 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  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. // Gibt this zurück
  36. void* getNodeObject() const override;
  37. // Gibt die Anzahl aller Objekte auf dem Bild zurück
  38. int getChildCount() const override;
  39. // Entfernt alle Eckpunkte in einem Gebit
  40. // area: Das Gebiet, in dem die Eckpunkte gelöscht werden sollen
  41. void removeSelectedVertices(QRect area);
  42. // Löscht ein bestimmtes Objekt
  43. // o: Das Objekt, welches gelöscht werden soll
  44. void removeObject(ObjectPolygon o);
  45. // Fügt ein Objekt zu dem Bild hinzu. Das Objekt wird automatisch am
  46. // Bildrand abgeschnitten
  47. // name: Die ID des Objektes
  48. // truncated: true, falls das Objekt abgeschnitten ist
  49. // po: Eine Liste mit Polygonen, welche die Umrisse des Objektes sind
  50. void addObject(QString name,
  51. bool truncated,
  52. QList<QPolygon>po);
  53. // Wendet die Maske auf das Bild an und löscht alle Objekte, welche sich in
  54. // verbotenen Bereichen befinden
  55. // m: die Maske
  56. void applyMask(Mask& m);
  57. // Spaltet ein Objekt in zwei Teile
  58. // object: Das Objekt welches zerteilt werden soll
  59. // beginn: Der Index des Start Eckpunktes
  60. // end: Der Index des End Eckpunktes
  61. // pIndex: Der Index des Polygons, welches zerteilt werden soll
  62. void splitObject(ObjectPolygon object,
  63. int begin,
  64. int end,
  65. int pIndex);
  66. // gibt den Namen des Bildes zurück
  67. QString getName() const;
  68. // Gibt den Aufnahmezeitpunkt des Bildes zurück
  69. QString getTimestamp() const;
  70. // Gibt eine Liste mit Objekten zurück, welche sich auf dem Bild befinden
  71. QList<ObjectPolygon>& getObjects();
  72. // Setzt die Objekte, welche sich auf dem Bild befinden. Alle vorherigen
  73. // Objekte werden entfernt.
  74. // objects: die Liste mit den neuen Objekten
  75. void setObjects(std::vector<std::vector<cv::Point> >objects);
  76. // Gibt das geladene Bild als Objekt des Qt Frameworks zurück
  77. QImage getImage();
  78. // Gibt das geladene Bild als Objekt der OpenCV Bibliotek zurück
  79. cv::Mat getImageMatrix() const;
  80. // Gibt den Bildausschnitt zurück, auf dem ein Objekt komplett sichtbar ist
  81. // objectId: die ID des Objektes, welches auf dem Bild sein soll
  82. QImage getObjectImage(QString objectId);
  83. // Gibt den Bildausschnitt zurück, auf dem ein Objekt komplett sichtbar ist
  84. // object: das Objekt, welches auf dem Bild sein soll
  85. QImage getObjectImage(ObjectPolygon object);
  86. // Prüft ob ein Objekt auf dem Bild vorhanden ist
  87. // id: Die ID des Objektes
  88. bool hasObject(QString id);
  89. // Gibt true zurück, falls kein Fehler in der Annotation des Bildes gefunden
  90. // wurde
  91. bool isCorrectAnnotated() const;
  92. // Gibt true zurück, falls das Bild noch nicht annotiert wurde
  93. bool isNotAnnotated() const;
  94. // Gibt das Objekt zurück, welches an einer bestimmten Position im Bild ist.
  95. // 0 falls an der Stelle kein Objekt ist
  96. // pos: die Position, an der ein Objekt gesucht werden soll
  97. // pIndex: wird auf den Index des Polygons gesetzt, welches an der Stelle
  98. // ist, falls dort ein Objekt existiert
  99. ObjectPolygon getObjectAt(QPoint pos,
  100. int & pIndex) const;
  101. // Setzt das Objekt an einer bestimmten Position im Bild.
  102. // Fals an der Position bereits ein Objekt existiert, so wird nur die Objekt
  103. // ID gesetzt.
  104. // pos: die Position
  105. // object: Das neue Objekt
  106. // center: Der Mittelpunkt des neuen Objektes
  107. // rotation: Die Drehung des neuen Objektes um den Mittelpunkt
  108. void setObjectAt(QPoint pos,
  109. ObjectPolygon object,
  110. QPoint center = QPoint(0, 0),
  111. float rotation = 0);
  112. // Macht ein Objekt an einer bestimmten Stelle sichtbar oder unsichtbar
  113. // pos: Die Position
  114. void selectObjectAt(QPoint pos);
  115. // Schneidet ein Polygon am rand des Bildes ab und gibt das Ergebnis zurück
  116. // uncliped: Das nicht abgeschnittene Polygon
  117. QPolygon clipPolygon(QPolygon uncliped) const;
  118. // Vereiniegt verschiedene Objekte mit der gleichen Objekt ID zu einem
  119. // id: Die ID, deren Objekte vereiniegt werden sollen
  120. void connectObjects(QString id);
  121. // Zerteilt ein Objekt, welches aus mehreren Polygonen besteht
  122. // o: Das Objekt welches zerteilt werden soll
  123. void disconnectObject( ObjectPolygon o );
  124. // Gibt 1 zurück, falls die Annotation zu dem Bild gespeichert werden muss
  125. // und setzt den Flag auf 0, so dass erst nach einer änderung wieder 1 zurückgegeben wird
  126. bool wasChangedSinceLastSave();
  127. };
  128. #endif // FRAME_H