pub struct MaskHandle { /* private fields */ }Expand description
Processed mask image with optional further refinement and output generation.
Represents a concrete mask image (typically binary after thresholding) produced by executing
operations from a crate::MatteHandle.
§Example
use outline::Outline;
let outline = Outline::new("model.onnx");
let session = outline.for_image("input.jpg")?;
let mask = session.matte().blur().threshold().processed()?;
// Generate multiple outputs from the mask
mask.save("mask.png")?;
mask.foreground()?.save("subject.png")?;To trace the mask into SVG, pass a MaskVectorizer implementation to MaskHandle::trace.
The crate re-exports VtracerSvgVectorizer when the vectorizer-vtracer feature is enabled.
Implementations§
Source§impl MaskHandle
impl MaskHandle
Sourcepub fn to_raw_mask(&self) -> GrayImage
pub fn to_raw_mask(&self) -> GrayImage
Clone and return the raw mask.
Sourcepub fn as_raw_mask(&self) -> &GrayImage
pub fn as_raw_mask(&self) -> &GrayImage
Get a reference to the raw mask.
Sourcepub fn dimensions(&self) -> (u32, u32)
pub fn dimensions(&self) -> (u32, u32)
Return the current mask canvas dimensions.
Sourcepub fn image(&self) -> &GrayImage
👎Deprecated: use as_raw_mask()
pub fn image(&self) -> &GrayImage
use as_raw_mask()
Get a reference to the raw mask.
Sourcepub fn into_image(self) -> GrayImage
pub fn into_image(self) -> GrayImage
Consume the handle and return the current mask.
Sourcepub fn save(&self, path: impl AsRef<Path>) -> OutlineResult<()>
pub fn save(&self, path: impl AsRef<Path>) -> OutlineResult<()>
Save the current mask to the specified path.
Sourcepub fn bounding_box(&self) -> Option<BoundingBox>
pub fn bounding_box(&self) -> Option<BoundingBox>
Compute the bounding box of the current mask using a non-zero threshold.
Sourcepub fn bounding_box_with(&self, threshold: u8) -> Option<BoundingBox>
pub fn bounding_box_with(&self, threshold: u8) -> Option<BoundingBox>
Compute the bounding box of the current mask at or above threshold.
Sourcepub fn blur(self) -> Self
pub fn blur(self) -> Self
Add a blur operation using the default sigma.
§Panics
Panics if the configured default blur sigma is not greater than zero.
Sourcepub fn threshold_with(self, value: u8) -> Self
pub fn threshold_with(self, value: u8) -> Self
Add a threshold operation with a custom value.
Sourcepub fn dilate_with(self, radius: f32) -> Self
pub fn dilate_with(self, radius: f32) -> Self
Sourcepub fn erode_with(self, radius: f32) -> Self
pub fn erode_with(self, radius: f32) -> Self
Sourcepub fn erode_with_border_mode(
self,
radius: f32,
border_mode: ErosionBorderMode,
) -> Self
pub fn erode_with_border_mode( self, radius: f32, border_mode: ErosionBorderMode, ) -> Self
Sourcepub fn fill_holes(self) -> Self
pub fn fill_holes(self) -> Self
Add a hole-filling operation to the processing pipeline.
Note: Hole-filling typically works best on binary masks. If this mask is still grayscale,
consider calling threshold first.
Sourcepub fn fill_holes_with(self, threshold: u8) -> Self
pub fn fill_holes_with(self, threshold: u8) -> Self
Add a hole-filling operation with a custom threshold.
Note: Hole-filling typically works best on binary masks. If this mask is still grayscale,
consider calling threshold first.
Sourcepub fn keep_largest_component(self) -> Self
pub fn keep_largest_component(self) -> Self
Keep only the largest connected foreground component.
Note: Component filtering typically works best on binary masks. If this mask is still grayscale,
consider calling threshold first.
Sourcepub fn keep_n_largest_components(self, count: usize) -> Self
pub fn keep_n_largest_components(self, count: usize) -> Self
Keep the largest count connected foreground components.
Note: Component filtering typically works best on binary masks. If this mask is still grayscale,
consider calling threshold first.
Sourcepub fn drop_components_below_area(self, min_area: f32) -> Self
pub fn drop_components_below_area(self, min_area: f32) -> Self
Sourcepub fn processed(self) -> OutlineResult<MaskHandle>
pub fn processed(self) -> OutlineResult<MaskHandle>
Process the mask with the accumulated operations.
Sourcepub fn processed_with(
self,
pipeline: &MaskPipeline,
) -> OutlineResult<MaskHandle>
pub fn processed_with( self, pipeline: &MaskPipeline, ) -> OutlineResult<MaskHandle>
Process the mask with the accumulated operations and a custom pipeline.
Sourcepub fn foreground(&self) -> OutlineResult<ForegroundHandle>
pub fn foreground(&self) -> OutlineResult<ForegroundHandle>
Compose the RGBA foreground image from the RGB image and the current mask.
Sourcepub fn colorize(&self, color: impl Into<MaskColor>) -> RgbaImage
pub fn colorize(&self, color: impl Into<MaskColor>) -> RgbaImage
Colorize the current mask into a flat-color RGBA image.
Sourcepub fn trace<V>(
&self,
vectorizer: &V,
options: &V::Options,
) -> OutlineResult<V::Output>where
V: MaskVectorizer,
pub fn trace<V>(
&self,
vectorizer: &V,
options: &V::Options,
) -> OutlineResult<V::Output>where
V: MaskVectorizer,
Trace the current mask using the specified vectorizer and options.
Sourcepub fn pad(self, padding: impl Into<Padding>) -> Self
pub fn pad(self, padding: impl Into<Padding>) -> Self
Expand the mask canvas by the given padding while keeping content at the same offset.
Any pending mask operations are applied before padding so method call order is preserved.
The underlying RGB canvas is padded with black to keep foreground
aligned with the mask.
Sourcepub fn crop(self, bounds: BoundingBox) -> Option<Self>
pub fn crop(self, bounds: BoundingBox) -> Option<Self>
Crop the mask and source RGB image to bounds.
Returns None when bounds is empty or outside the current mask canvas.
Sourcepub fn crop_to_content(self) -> Option<Self>
pub fn crop_to_content(self) -> Option<Self>
Crop the mask and source RGB image to the smallest non-zero content box.
Returns None when the current mask has no non-zero pixels.
Sourcepub fn crop_to_content_with(self, threshold: u8) -> Option<Self>
pub fn crop_to_content_with(self, threshold: u8) -> Option<Self>
Crop the mask and source RGB image to the smallest content box at or above threshold.
Returns None when the current mask has no pixels at or above threshold.
Trait Implementations§
Source§impl Clone for MaskHandle
impl Clone for MaskHandle
Auto Trait Implementations§
impl Freeze for MaskHandle
impl RefUnwindSafe for MaskHandle
impl Send for MaskHandle
impl Sync for MaskHandle
impl Unpin for MaskHandle
impl UnsafeUnpin for MaskHandle
impl UnwindSafe for MaskHandle
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.