AssumedObjectData

Inheritance: java.lang.Object

public class AssumedObjectData

Los datos del objeto asumido. Incluye el tipo y el área del objeto.

Constructores

ConstructorDescripción
AssumedObjectData()Inicializa una nueva instancia de la clase AssumedObjectData.
AssumedObjectData(int type, Rectangle bounds)Inicializa una nueva instancia de la clase AssumedObjectData.
AssumedObjectData(String type, Rectangle bounds)Inicializa una nueva instancia de la clase AssumedObjectData.

Métodos

MétodoDescripción
getType()Obtiene el tipo del objeto.
setType(int value)Establece el tipo del objeto.
getBounds()Obtiene los límites del objeto.
setBounds(Rectangle value)Establece los límites del objeto.

Example: Saving image masking result with feathering based on image size.

Guardando el resultado del enmascarado de imagen con difuminado basado en el tamaño de la imagen. El enmascarado de imagen se realiza usando trazos predeterminados auto calculados. Además, los datos de los dos objetos asumidos también se especifican en la propiedad AssumedObjects de AutoMaskingGraphCutOptions.

List<AssumedObjectData> assumedObjects = new LinkedList<AssumedObjectData>();
assumedObjects.add(new AssumedObjectData(DetectedObjectType.Human, new Rectangle(100, 100, 150, 300)));
assumedObjects.add(new AssumedObjectData(DetectedObjectType.Dog, new Rectangle(300, 100, 50, 30)));

MaskingResult[] results;
try (RasterImage image = (RasterImage)Image.load("input.jpg"))
{
    try (PngOptions pngOptions = new PngOptions())
    {
        pngOptions.setColorType(PngColorType.TruecolorWithAlpha);
        pngOptions.setSource(new FileCreateSource("tempFile"));

        AutoMaskingGraphCutOptions options = new AutoMaskingGraphCutOptions();
        options.setAssumedObjects(assumedObjects);
        options.setCalculateDefaultStrokes(true);
        options.setFeatheringRadius((Math.max(image.getWidth(), image.getHeight()) / 500) + 1);
        options.setMethod(SegmentationMethod.GraphCut);
        options.setDecompose(false);
        options.setExportOptions(pngOptions);
        options.setBackgroundReplacementColor(Color.getTransparent());

        results = new ImageMasking(image).decompose(options);
    }
}

try (RasterImage resultImage = (RasterImage)results[1].getImage())
{
    PngOptions pngOptions = new PngOptions();
    pngOptions.setColorType(PngColorType.TruecolorWithAlpha);
    resultImage.save("output.png", pngOptions);
}

// liberar recursos
for (MaskingResult res : results)
{
    res.close();
}
            

Example: Saving image masking result with feathering based on image size and re-using masking options for the new masking iteration.

Guardando el resultado del enmascarado de imagen con difuminado basado en el tamaño de la imagen y reutilizando las opciones de enmascarado para la nueva iteración de enmascarado. El enmascarado de imagen se realiza usando trazos predeterminados auto calculados. Además, los datos de los dos objetos asumidos también se especifican en la propiedad AssumedObjects de AutoMaskingGraphCutOptions. Después de obtener el resultado inicial del enmascarado, los trazos de fondo/primer plano aplicados se modifican y se realiza otra iteración de enmascarado.

List<AssumedObjectData> assumedObjects = new LinkedList<AssumedObjectData>();
assumedObjects.add(new AssumedObjectData(DetectedObjectType.Human, new Rectangle(100, 100, 150, 300)));
assumedObjects.add(new AssumedObjectData(DetectedObjectType.Dog, new Rectangle(300, 100, 50, 30)));

MaskingResult[] results;
AutoMaskingGraphCutOptions options = new AutoMaskingGraphCutOptions();
try (RasterImage image = (RasterImage)Image.load("input.jpg"))
{
    try (PngOptions pngOptions = new PngOptions())
    {
        pngOptions.setColorType(PngColorType.TruecolorWithAlpha);
        pngOptions.setSource(new FileCreateSource("tempFile"));

        options.setAssumedObjects(assumedObjects);
        options.setCalculateDefaultStrokes(true);
        options.setFeatheringRadius(3);
        options.setMethod(SegmentationMethod.GraphCut);
        options.setDecompose(false);
        options.setExportOptions(pngOptions);
        options.setBackgroundReplacementColor(Color.getTransparent());

        results = new ImageMasking(image).decompose(options);
    }
}

// En este punto, los trazos de primer plano/fondo aplicados pueden ser analizados y, basándose en ellos, adicionales
// los trazos de primer plano/fondo pueden ser proporcionados manualmente.
Point[] appliedBackgroundStrokes = options.getDefaultBackgroundStrokes();
Point[] appliedForegroundStrokes = options.getDefaultForegroundStrokes();
Rectangle[] appliedObjectRectangles = options.getDefaultObjectsRectangles();
try (RasterImage resultImage = (RasterImage)results[1].getImage())
{
    PngOptions pngOptions = new PngOptions();
    pngOptions.setColorType(PngColorType.TruecolorWithAlpha);
    resultImage.save("output.png", pngOptions);
}

// liberar recursos
for (MaskingResult res : results)
{
    res.close();
}

try (RasterImage image = (RasterImage)Image.load("input.jpg"))
{
    // Reutilizando AutoMaskingGraphCutOptions no es necesario realizar los cálculos de trazos predeterminados una segunda vez.
    options.setCalculateDefaultStrokes(false);
    // Cuando se proporcionan tanto los trazos predeterminados como ObjectsPoints en la propiedad Args de AutoMaskingArgs, los arreglos de puntos terminan combinados.
    // El primer arreglo ObjectsPoints se considera un arreglo de puntos de fondo y
    // el segundo arreglo ObjectsPoints se considera un arreglo de puntos de primer plano.
    // Cuando tanto DefaultObjectsRectangles como ObjectsRectangles en la propiedad Args de AutoMaskingArgs se proporcionan,
    // solo se utiliza el arreglo de Args.
    AutoMaskingArgs args = new AutoMaskingArgs();
    args.setObjectsPoints(new Point[][]
            {
                    new Point[] { new Point(100, 100), new Point(150, 100) },
                    new Point[] { new Point(500, 200) },
            });

    args.setObjectsRectangles( new Rectangle[] { new Rectangle(100, 100, 300, 300) });
    options.setArgs(args);
    results = new ImageMasking(image).decompose(options);
}

try (RasterImage resultImage = (RasterImage)results[1].getImage())
{
    PngOptions pngOptions = new PngOptions();
    pngOptions.setColorType(PngColorType.TruecolorWithAlpha);
    resultImage.save("output.png", pngOptions);
}

// liberar recursos
for (MaskingResult res : results)
{
    res.close();
}

Example: Saving image masking result with feathering based on image size, modifying obtained default strokes and using it for the new masking iteration.

Guardando el resultado del enmascarado de imagen con difuminado basado en el tamaño de la imagen, modificando los trazos predeterminados obtenidos y usándolos para la nueva iteración de enmascarado. El enmascarado de imagen se realiza utilizando trazos predeterminados calculados automáticamente. Además, los datos de los dos objetos asumidos también se especifican en la propiedad AssumedObjects de AutoMaskingGraphCutOptions. Después de obtener el resultado inicial del enmascarado, los trazos de fondo/primer plano aplicados se modifican y se realiza otra iteración de enmascarado usando una nueva instancia de GraphCutMaskingOptions.

List<AssumedObjectData> assumedObjects = new LinkedList<AssumedObjectData>();
assumedObjects.add(new AssumedObjectData(DetectedObjectType.Human, new Rectangle(100, 100, 150, 300)));
assumedObjects.add(new AssumedObjectData(DetectedObjectType.Dog, new Rectangle(300, 100, 50, 30)));

MaskingResult[] results;
AutoMaskingGraphCutOptions options = new AutoMaskingGraphCutOptions();
try (RasterImage image = (RasterImage)Image.load("input.jpg"))
{
    try (PngOptions pngOptions = new PngOptions())
    {
        pngOptions.setColorType(PngColorType.TruecolorWithAlpha);
        pngOptions.setSource(new FileCreateSource("tempFile"));

        options.setAssumedObjects(assumedObjects);
        options.setCalculateDefaultStrokes(true);
        options.setFeatheringRadius(3);
        options.setMethod(SegmentationMethod.GraphCut);
        options.setDecompose(false);
        options.setExportOptions(pngOptions);
        options.setBackgroundReplacementColor(Color.getTransparent());

        results = new ImageMasking(image).decompose(options);
    }
}

// En este punto, los trazos de primer plano/fondo aplicados pueden ser analizados y, basándose en ellos, adicionales
// los trazos de primer plano/fondo pueden ser proporcionados manualmente.

Point[] appliedBackgroundStrokes = options.getDefaultBackgroundStrokes();
Point[] appliedForegroundStrokes = options.getDefaultForegroundStrokes();
Rectangle[] appliedObjectRectangles = options.getDefaultObjectsRectangles();
try (RasterImage resultImage = (RasterImage)results[1].getImage())
{
    PngOptions pngOptions = new PngOptions();
    pngOptions.setColorType(PngColorType.TruecolorWithAlpha);
    resultImage.save("output.png", pngOptions);
}

// liberar recursos
for (MaskingResult res : results)
{
    res.close();
}

appliedBackgroundStrokes[5] = new Point(100, 100);
appliedBackgroundStrokes[15] = new Point(150, 100);

appliedForegroundStrokes[1] = new Point(500, 200);

appliedObjectRectangles[0] = new Rectangle(100, 100, 300, 300);

try (RasterImage image = (RasterImage)Image.load("input.jpg"))
{
    try (PngOptions pngOptions = new PngOptions())
    {
        pngOptions.setColorType(PngColorType.TruecolorWithAlpha);
        pngOptions.setSource(new FileCreateSource("tempFile"));

        AutoMaskingArgs args = new AutoMaskingArgs();
        args.setObjectsPoints(new Point[][]
                {
                        appliedBackgroundStrokes,
                        appliedForegroundStrokes
                });

        args.setObjectsRectangles(appliedObjectRectangles);
                    
        GraphCutMaskingOptions graphCutOptions = new GraphCutMaskingOptions();
        graphCutOptions.setFeatheringRadius(3);
        graphCutOptions.setMethod(SegmentationMethod.GraphCut);
        graphCutOptions.setDecompose(false);
        graphCutOptions.setExportOptions(pngOptions);
        graphCutOptions.setBackgroundReplacementColor(Color.getTransparent());
        graphCutOptions.setArgs(args);
                    
        results = new ImageMasking(image).decompose(graphCutOptions);
    }
}

try (RasterImage resultImage = (RasterImage)results[1].getImage())
{
    PngOptions pngOptions = new PngOptions();
    pngOptions.setColorType(PngColorType.TruecolorWithAlpha);
    resultImage.save("output.png", pngOptions);
}

// liberar recursos
for (MaskingResult res : results)
{
    res.close();
}

AssumedObjectData()

public AssumedObjectData()

Inicializa una nueva instancia de la clase AssumedObjectData.

AssumedObjectData(int type, Rectangle bounds)

public AssumedObjectData(int type, Rectangle bounds)

Inicializa una nueva instancia de la clase AssumedObjectData.

Parameters:

ParámetroTipoDescripción
tipointEl tipo del objeto.
boundsRectangleLos límites del objeto.

AssumedObjectData(String type, Rectangle bounds)

public AssumedObjectData(String type, Rectangle bounds)

Inicializa una nueva instancia de la clase AssumedObjectData.

Parameters:

ParámetroTipoDescripción
tipojava.lang.StringEl tipo del objeto.
boundsRectangleLos límites del objeto.

getType()

public final int getType()

Obtiene el tipo del objeto.

Returns: int - el tipo del objeto.

setType(int value)

public final void setType(int value)

Establece el tipo del objeto.

Parameters:

ParámetroTipoDescripción
valorintel tipo del objeto.

getBounds()

public final Rectangle getBounds()

Obtiene los límites del objeto.

Returns: Rectangle - the object’s bounds.

setBounds(Rectangle value)

public final void setBounds(Rectangle value)

Establece los límites del objeto.

Parameters:

ParámetroTipoDescripción
valueRectanglelos límites del objeto.