Calculates the minimum bounding rectangle containing all pixel content in the specified bounds.
public void CalculateContentBound(ICollection<ExObjContentBound> bounds,ExObjContentBoundOptions options)
- (void)calculateContentBound:(NSEnumerator<LTExObjContentBound *> *)bounds withOptions:(LTExObjContentBoundOptions *)options; public void calculateContentBound(java.util.Collection<ExObjContentBound> bounds,ExObjContentBoundOptions options);
public:void CalculateContentBound(ICollection<ExObjContentBound^>^ bounds,ExObjContentBoundOptions^ options)
bounds
The bounds to be updated. This value cannot be null.
options
Additional options. This value cannot be null.
using Leadtools;using Leadtools.Codecs;using Leadtools.ImageProcessing;using Leadtools.ImageProcessing.Core;public void ExtractObjectsCommandExample(){using (RasterCodecs codecs = new RasterCodecs())// Load the original imageusing (RasterImage inputImage = codecs.Load(Path.Combine(LEAD_VARS.ImagesDir, "demoicr2.tif"))){// Setup the extraction optionsExtractObjectsCommand command = new ExtractObjectsCommand(){DetectChildren = true,EightConnectivity = true,Outline = true};// Extract the objectscommand.Run(inputImage);using (ExObjData data = command.Data){// Log the number of objects from the first listExObjObjectList objects = data[0].Objects;Console.WriteLine($"Number of objects (before filtering): {objects.Count}");// Log the number of points around the first object (braces for scope){int count = 0;foreach (ExObjOutlinePoint point in objects.First().Outline)count++;Console.WriteLine($"First object's outline length: {count}");}// Setup the filter optionsExObjFilterOptions filterOptions = new ExObjFilterOptions(){LargeObjectThreshold = -1, // No upper limit on sizeSmallObjectThreshold = 10 // Remove objects smaller than 10x10 pixels};// Filter the objectsdata.FilterList(objects, filterOptions);// Log the number of objects againConsole.WriteLine($"Number of objects (after filtering): {objects.Count}");// Setup the content bound optionsExObjContentBound contentBound = new ExObjContentBound(new LeadRect(192, 260, 323, 146));ExObjContentBoundOptions contentBoundOptions = new ExObjContentBoundOptions(){ObjectsOfInterest = null // Pass null to use every object in data};// Calculate the content boundsdata.CalculateContentBound(new ExObjContentBound[] { contentBound }, contentBoundOptions);// Setup the region optionsExObjRegionOptions regionOptions = new ExObjRegionOptions(){Horizontal = true};// Calculate each object's regiondata.CalculateRegion(objects, regionOptions);// Create an output imageusing (RasterImage outputImage = RasterImage.Create(inputImage.Width, inputImage.Height, 24, inputImage.XResolution, RasterColor.White)){// Fill the output image with whitenew FillCommand(RasterColor.White).Run(outputImage);// Draw the content bound rects for the first word. Red for the input, green for the output.outputImage.AddRectangleToRegion(null, contentBound.Input, RasterRegionCombineMode.Set);new FillCommand(new RasterColor(255, 0, 0)).Run(outputImage);outputImage.AddRectangleToRegion(null, contentBound.Content, RasterRegionCombineMode.Set);new FillCommand(new RasterColor(0, 255, 0)).Run(outputImage);// Populate the output image with each object's regionforeach (ExObjObject @object in objects)foreach (ExObjSegment segment in @object.RegionHorizontal){// Update the region to the current segmentoutputImage.AddRectangleToRegion(null, segment.Bounds, RasterRegionCombineMode.Set);// Fill the region with blacknew FillCommand(RasterColor.Black).Run(outputImage);}// Clear the output image's regionoutputImage.MakeRegionEmpty();// Save the output imagecodecs.Save(outputImage, Path.Combine(LEAD_VARS.ImagesDir, "ExtractObjects.png"), RasterImageFormat.Png, 0);}}}}static class LEAD_VARS{public const string ImagesDir = @"C:\LEADTOOLS23\Resources\Images";}
import java.io.File;import java.io.IOException;import java.util.ArrayList;import java.util.Collection;import java.util.Collections;import java.util.Iterator;import org.junit.*;import org.junit.runner.JUnitCore;import org.junit.runner.Result;import org.junit.runner.notification.Failure;import static org.junit.Assert.*;import leadtools.*;import leadtools.codecs.*;import leadtools.imageprocessing.FillCommand;import leadtools.imageprocessing.core.*;import leadtools.internal.Tuple;public void extractObjectsCommandExample() {final String LEAD_VARS_IMAGES_DIR = "C:\\LEADTOOLS23\\Resources\\Images";RasterCodecs codecs = new RasterCodecs();// Load the original imageRasterImage inputImage = codecs.load(combine(LEAD_VARS_IMAGES_DIR, "demoicr2.tif"));// Setup the extraction optionsExtractObjectsCommand command = new ExtractObjectsCommand();command.setDetectChildren(true);command.setEightConnectivity(true);command.setOutline(true);// Extract the objectscommand.run(inputImage);ExObjData data = command.getData();// Log the number of objects from the first listExObjObjectList objects = data.iterator().next().getObjects();System.out.println("Number of objects (before filtering): " + objects.size());// Log the number of points around the first object (braces for scope)System.out.println(objects.iterator().next().getOutline().size());// Setup the filter optionsExObjFilterOptions filterOptions = new ExObjFilterOptions();filterOptions.setLargeObjectThreshold(-1);filterOptions.setSmallObjectThreshold(10);// Filter the objectsdata.filterList(objects, filterOptions);// Log the number of objects againSystem.out.println("Number of objects (after filtering): " + objects.size());// Setup the content bound optionsExObjContentBound contentBound = new ExObjContentBound(new LeadRect(192, 260, 323, 146));Collection<ExObjContentBound> col = Collections.singleton(contentBound);ExObjContentBoundOptions contentBoundOptions = new ExObjContentBoundOptions();contentBoundOptions.setObjectsOfInterest(null);// Calculate the content boundsdata.calculateContentBound(col, contentBoundOptions);// Setup the region optionsExObjRegionOptions regionOptions = new ExObjRegionOptions();regionOptions.setHorizontal(true);// Calculate each object's regiondata.calculateRegion(objects, regionOptions);// Create an output imageRasterImage outputImage = RasterImage.create(inputImage.getWidth(), inputImage.getHeight(), 24,inputImage.getXResolution(), RasterColor.WHITE);// Fill the output image with whitenew FillCommand(RasterColor.WHITE).run(outputImage);// Draw the content bound rects for the first word. Red for the input, green for// the output.outputImage.addRectangleToRegion(null, contentBound.getInput(), RasterRegionCombineMode.SET);new FillCommand(new RasterColor(255, 0, 0)).run(outputImage);outputImage.addRectangleToRegion(null, contentBound.getContent(), RasterRegionCombineMode.SET);new FillCommand(new RasterColor(0, 255, 0)).run(outputImage);// Populate the output image with each object's regionIterator<ExObjObject> it = objects.iterator();while (it.hasNext()) {Iterator<ExObjSegment> segments = it.next().getRegionHorizontal().iterator();while (segments.hasNext()) {outputImage.addRectangleToRegion(null, segments.next().getBounds(), RasterRegionCombineMode.SET);new FillCommand(RasterColor.BLACK).run(outputImage);}}// Clear the output image's regionoutputImage.makeRegionEmpty();// Save the output imagecodecs.save(outputImage, combine(LEAD_VARS_IMAGES_DIR, "ExtractObjects.png"), RasterImageFormat.PNG, 0);System.out.println("Command run and image saved to: " + combine(LEAD_VARS_IMAGES_DIR, "ExtractObjects.png"));assertTrue(new File(combine(LEAD_VARS_IMAGES_DIR, "ExtractObjects.png")).exists());outputImage.dispose();data.dispose();inputImage.dispose();codecs.dispose();}
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
