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
Your email has been sent to support! Someone should be in touch! If your matter is urgent please come back into chat.
Chat Hours:
Monday - Friday, 8:30am to 6pm ET
Thank you for your feedback!
Please fill out the form again to start a new chat.
All agents are currently offline.
Chat Hours:
Monday - Friday
8:30AM - 6PM EST
To contact us please fill out this form and we will contact you via email.