Indicates whether object extraction should be performed for multiple colors instead of bitonal.
public bool UseMultiColors {get; set;}
Public Property UseMultiColors() As Boolean
Get
Set
public:
property bool UseMultiColors
{
bool get()
void set(bool value)
}
true to extract objects for each specified entry in ColorInfo; otherwise, false for bitonal extraction. The default value is false.
The colors can be configured using ColorInfo.
using Leadtools;
using Leadtools.Codecs;
using Leadtools.ImageProcessing;
using Leadtools.ImageProcessing.Core;
public void ExtractObjectsCommandUseMultiColorsExample()
{
using (RasterCodecs codecs = new RasterCodecs())
// Load the original image
using (RasterImage inputImage = codecs.Load(Path.Combine(LEAD_VARS.ImagesDir, "unwarp1.jpg")))
{
// Setup the extraction options
Tuple<string, RasterColor>[] colors = new Tuple<string, RasterColor>[]
{
Tuple.Create("DarkGray", new RasterColor(30, 30, 30)),
Tuple.Create("DarkGreen", new RasterColor(41, 108, 70)),
Tuple.Create("LightRed", new RasterColor(200, 68, 65))
};
ExtractObjectsCommand command = new ExtractObjectsCommand()
{
ColorInfo = colors
.Select(c => new ExObjColorInfo()
{
Color = c.Item2,
Threshold = 50
})
.ToArray(),
DetectChildren = true,
EightConnectivity = true,
IgnoreSmallNoise = true,
Outline = true,
SmallNoiseThreshold = 5, // Filter out noise smaller than 5x5 pixels
UseMultiColors = true
};
// Extract the objects
command.Run(inputImage);
using (ExObjData data = command.Data)
{
// Put objects into one list for processing all at once
List<ExObjObject> objects = new List<ExObjObject>();
foreach (ExObjResult result in data)
objects.AddRange(result.Objects);
// Setup the region options
ExObjRegionOptions regionOptions = new ExObjRegionOptions()
{
Horizontal = true
};
// Calculate each object's region
data.CalculateRegion(objects, regionOptions);
// Create an output image
using (RasterImage outputImage = RasterImage.Create(inputImage.Width, inputImage.Height, 24, inputImage.XResolution, RasterColor.White))
{
// Extract each color to a separate image
int colorIndex = -1;
foreach (ExObjResult result in data)
{
colorIndex++;
// Fill the output image with white
new FillCommand(RasterColor.White).Run(outputImage);
// Populate the output image with each object's region
foreach (ExObjObject @object in result.Objects)
foreach (ExObjSegment segment in @object.RegionHorizontal)
{
// Update the region to the current segment
outputImage.AddRectangleToRegion(null, segment.Bounds, RasterRegionCombineMode.Set);
// Fill the region with the current color
new FillCommand(colors[colorIndex].Item2).Run(outputImage);
}
// Clear the output image's region
outputImage.MakeRegionEmpty();
// Save the output image
codecs.Save(outputImage, Path.Combine(LEAD_VARS.ImagesDir, $"ExtractObjectsMultiColors_{colors[colorIndex].Item1}.png"), RasterImageFormat.Png, 0);
}
}
}
}
}
static class LEAD_VARS
{
public const string ImagesDir = @"C:\LEADTOOLS21\Resources\Images";
}
Imports Leadtools
Imports Leadtools.Codecs
Imports Leadtools.ImageProcessing
Imports Leadtools.ImageProcessing.Core
Public Sub ExtractObjectsCommandUseMultiColorsExample()
Using codecs As New RasterCodecs()
' Load the original image
Using inputImage As RasterImage = codecs.Load(Path.Combine(LEAD_VARS.ImagesDir, "unwarp1.jpg"))
' Setup the extraction options
Dim colors As Tuple(Of String, RasterColor)() = New Tuple(Of String, RasterColor)() {
Tuple.Create("DarkGray", New RasterColor(30, 30, 30)),
Tuple.Create("DarkGreen", New RasterColor(41, 108, 70)),
Tuple.Create("LightRed", New RasterColor(200, 68, 65))
}
Dim command As New ExtractObjectsCommand() With {
.ColorInfo = colors.[Select](Function(c) New ExObjColorInfo() With {
.Color = c.Item2,
.Threshold = 50
}).ToArray(),
.DetectChildren = True,
.EightConnectivity = True,
.IgnoreSmallNoise = True,
.Outline = True,
.SmallNoiseThreshold = 5, ' Filter out noise smaller than 5x5 pixels
.UseMultiColors = True
}
' Extract the objects
command.Run(inputImage)
Using data As ExObjData = command.Data
' Put objects into one list for processing all at once
Dim objects As New List(Of ExObjObject)()
For Each result As ExObjResult In data
objects.AddRange(result.Objects)
Next
' Setup the region options
Dim regionOptions As New ExObjRegionOptions() With {
.Horizontal = True
}
' Calculate each object's region
data.CalculateRegion(objects, regionOptions)
' Create an output image
Using outputImage As RasterImage = RasterImage.Create(inputImage.Width, inputImage.Height, 24, inputImage.XResolution, RasterColor.White)
' Extract each color to a separate image
Dim colorIndex As Integer = -1
For Each result As ExObjResult In data
colorIndex += 1
' Fill the output image with white
Call New FillCommand(RasterColor.White).Run(outputImage)
' Populate the output image with each object's region
For Each [object] As ExObjObject In result.Objects
For Each segment As ExObjSegment In [object].RegionHorizontal
' Update the region to the current segment
outputImage.AddRectangleToRegion(Nothing, segment.Bounds, RasterRegionCombineMode.[Set])
' Fill the region with the current color
Call New FillCommand(colors(colorIndex).Item2).Run(outputImage)
Next
Next
' Clear the output image's region
outputImage.MakeRegionEmpty()
' Save the output image
codecs.Save(outputImage, Path.Combine(LEAD_VARS.ImagesDir, $"ExtractObjectsMultiColors_{colors(colorIndex).Item1}.png"), RasterImageFormat.Png, 0)
Next
End Using
End Using
End Using
End Using
End Sub
Public NotInheritable Class LEAD_VARS
Public Const ImagesDir As String = "C:\LEADTOOLS21\Resources\Images"
End Class
Help Collections
Raster .NET | C API | C++ Class Library | HTML5 JavaScript
Document .NET | C API | C++ Class Library | HTML5 JavaScript
Medical .NET | C API | C++ Class Library | HTML5 JavaScript
Medical Web Viewer .NET
Multimedia
Direct Show .NET | C API | Filters
Media Foundation .NET | C API | Transforms
Supported Platforms
.NET, Java, Android, and iOS/macOS Assemblies
Imaging, Medical, and Document
C API/C++ Class Libraries
Imaging, Medical, and Document
HTML5 JavaScript Libraries
Imaging, Medical, and Document