Exemple #1
0
class ColorBlob( object ):
    MIN_YUV = 0;
    MAX_YUV = 255;
    
    OFFSET_Y = 25;
    OFFSET_U = 25;
    OFFSET_V = 25;
    
    def __init__( self, name, color, rgbValues ):
        self.__name = name;
        self.__color = color;
        self.__rgbValues = rgbValues;
        
        # Parse the list of RGB-values.
        minR = minG = minB = 255;
        maxR = maxG = maxB = 0;
        
        # Loop over the list.
        for rgb in rgbValues:
            minR = min( rgb[ 0 ], minR );
            maxR = max( rgb[ 0 ], maxR );
            
            minG = min( rgb[ 1 ], minG );
            maxG = max( rgb[ 1 ], maxG );
            
            minB = min( rgb[ 2 ], minB );
            maxB = max( rgb[ 2 ], maxB );
            
        self.__minRgb = Color( ( minR, minG, minB ) );
        self.__maxRgb = Color( ( maxR, maxG, maxB ) );
        
    def calculateYuv( self, rgb, offset ):
        yuv = rgb.toYuv();
        
        y = max( min( yuv[ 0 ] + OFFSET, MAX_YUV ), MIN_YUV );
        u = max( min( yuv[ 1 ] + OFFSET, MAX_YUV ), MIN_YUV );
        v = max( min( yuv[ 2 ] + OFFSET, MAX_YUV ), MIN_YUV );
        
        return ( y, u, v );
        
    def formatColor( self ):
        return '{color} {merge} {expected} {name}'.format( color = self.__color,
                                                           merge = '0.000000',
                                                           expected = 1,
                                                           name = self.__name );
        
    def formatThreshold( self ):
        minYuv = self.__minRgb.toYuv();
        minY = int( round( max( min( minYuv[ 0 ] - self.OFFSET_Y, self.MAX_YUV ), self.MIN_YUV ) ) );
        minU = int( round( max( min( minYuv[ 1 ] - self.OFFSET_U, self.MAX_YUV ), self.MIN_YUV ) ) );
        minV = int( round( max( min( minYuv[ 2 ] - self.OFFSET_V, self.MAX_YUV ), self.MIN_YUV ) ) );
        
        maxYuv = self.__maxRgb.toYuv();
        maxY = int( round( max( min( maxYuv[ 0 ] + self.OFFSET_Y, self.MAX_YUV ), self.MIN_YUV ) ) );
        maxU = int( round( max( min( maxYuv[ 1 ] + self.OFFSET_U, self.MAX_YUV ), self.MIN_YUV ) ) );
        maxV = int( round( max( min( maxYuv[ 2 ] + self.OFFSET_V, self.MAX_YUV ), self.MIN_YUV ) ) );
        
        return '({minY}:{maxY}, {minU}:{maxU}, {minV}:{maxV})'.format( minY = minY,
                                                                       maxY = maxY,
                                                                       minU = minU,
                                                                       maxU = maxU,
                                                                       minV = minV,
                                                                       maxV = maxV );
    
    def __str__( self ):
        return '{name} ({n} samples)'.format( name = self.__name,
                                              n = len( self.__rgbValues ) );