def drawLabels(self, qp, ignore = []): if self.image.isNull() or self.w == 0 or self.h == 0: return if not self.annotation: return # The overlay is created in the viewing coordinates # This way, the drawing is more dense and the polygon edges are nicer # We create an image that is the overlay # Within this image we draw using another QPainter # Finally we use the real QPainter to overlay the overlay-image on what is drawn so far # The image that is used to draw the overlays overlay = QtGui.QImage( self.w, self.h, QtGui.QImage.Format_ARGB32_Premultiplied ) # Fill the image with the default color defaultLabel = name2label[self.defaultLabel] col = QtGui.QColor( *defaultLabel.color ) overlay.fill( col ) # Create a new QPainter that draws in the overlay image qp2 = QtGui.QPainter() qp2.begin(overlay) # The color of the outlines qp2.setPen(QtGui.QColor('white')) # Draw all objects for obj in self.annotation.objects: # The label of the object name = assureSingleInstanceName( obj.label ) # If we do not know a color for this label, warn the user if name not in name2label: print("The annotations contain unkown labels. This should not happen. Please inform the datasets authors. Thank you!") print("Details: label '{}', file '{}'".format(name,self.currentLabelFile)) continue poly = self.getPolygon(obj) # Scale the polygon properly polyToDraw = poly * QtGui.QTransform.fromScale(self.scale,self.scale) # Default drawing # Color from color table, solid brush col = QtGui.QColor( *name2label[name].color ) brush = QtGui.QBrush( col, QtCore.Qt.SolidPattern ) qp2.setBrush(brush) # Overwrite drawing if this is the highlighted object if self.highlightObj and obj == self.highlightObj: # First clear everything below of the polygon qp2.setCompositionMode( QtGui.QPainter.CompositionMode_Clear ) qp2.drawPolygon( polyToDraw ) qp2.setCompositionMode( QtGui.QPainter.CompositionMode_SourceOver ) # Set the drawing to a special pattern brush = QtGui.QBrush(col,QtCore.Qt.DiagCrossPattern) qp2.setBrush(brush) qp2.drawPolygon( polyToDraw ) # Draw outline of selected object dotted if self.highlightObj: brush = QtGui.QBrush(QtCore.Qt.NoBrush) qp2.setBrush(brush) qp2.setPen(QtCore.Qt.DashLine) polyToDraw = self.getPolygon(self.highlightObj) * QtGui.QTransform.fromScale(self.scale,self.scale) qp2.drawPolygon( polyToDraw ) # End the drawing of the overlay qp2.end() # Save QPainter settings to stack qp.save() # Define transparency qp.setOpacity(self.transp) # Draw the overlay image qp.drawImage(self.xoff,self.yoff,overlay) # Restore settings qp.restore() return overlay
def drawLabels(self, qp, ignore = []): if self.image.isNull() or self.w == 0 or self.h == 0: return if not self.annotation: return # The overlay is created in the viewing coordinates # This way, the drawing is more dense and the polygon edges are nicer # We create an image that is the overlay # Within this image we draw using another QPainter # Finally we use the real QPainter to overlay the overlay-image on what is drawn so far # The image that is used to draw the overlays overlay = QtGui.QImage( self.w, self.h, QtGui.QImage.Format_ARGB32_Premultiplied ) # Fill the image with the default color defaultLabel = name2label[self.defaultLabel] col = QtGui.QColor( *defaultLabel.color ) overlay.fill( col ) # Create a new QPainter that draws in the overlay image qp2 = QtGui.QPainter() qp2.begin(overlay) # The color of the outlines qp2.setPen(QtGui.QColor('white')) # Draw all objects for obj in self.annotation.objects: # The label of the object name = assureSingleInstanceName( obj.label ) # If we do not know a color for this label, warn the user if name not in name2label: print("The annotations contain unkown labels. This should not happen. Please inform the datasets authors. Thank you!") print("Details: label '{}', file '{}'".format(name,self.currentLabelFile)) continue poly = self.getPolygon(obj) # Scale the polygon properly polyToDraw = poly * QtGui.QTransform.fromScale(self.scale,self.scale) # Default drawing # Color from color table, solid brush col = QtGui.QColor( *name2label[name].color ) brush = QtGui.QBrush( col, QtCore.Qt.SolidPattern ) qp2.setBrush(brush) # Overwrite drawing if this is the highlighted object if self.highlightObj and obj == self.highlightObj: # First clear everything below of the polygon qp2.setCompositionMode( QtGui.QPainter.CompositionMode_Clear ) qp2.drawPolygon( polyToDraw ) qp2.setCompositionMode( QtGui.QPainter.CompositionMode_SourceOver ) # Set the drawing to a special pattern brush = QtGui.QBrush(col,QtCore.Qt.DiagCrossPattern) qp2.setBrush(brush) qp2.drawPolygon( polyToDraw ) # Draw outline of selected object dotted if self.highlightObj: brush = QtGui.QBrush(QtCore.Qt.NoBrush) qp2.setBrush(brush) qp2.setPen(QtCore.Qt.DashLine) polyToDraw = self.getPolygon(self.highlightObj) * QtGui.QTransform.fromScale(self.scale,self.scale) qp2.drawPolygon( polyToDraw ) # End the drawing of the overlay qp2.end() # Save QPainter settings to stack qp.save() # Define transparency qp.setOpacity(self.transp) # Draw the overlay image qp.drawImage(self.xoff,self.yoff,overlay) # Restore settings qp.restore() return overlay