<!--
{
  "documentType" : "article",
  "framework" : "Accelerate",
  "identifier" : "/documentation/Accelerate/morphology",
  "metadataVersion" : "0.1.0",
  "role" : "collectionGroup",
  "title" : "Morphology"
}
-->

# Morphology

Dilate and erode images.

## Topics

### Dilating an object

[`func vImageDilate_Planar8(UnsafePointer<vImage_Buffer>, UnsafePointer<vImage_Buffer>, vImagePixelCount, vImagePixelCount, UnsafePointer<UInt8>, vImagePixelCount, vImagePixelCount, vImage_Flags) -> vImage_Error`](/documentation/Accelerate/vImageDilate_Planar8(_:_:_:_:_:_:_:_:))

Dilates an 8-bit planar buffer.

[`func vImageDilate_PlanarF(UnsafePointer<vImage_Buffer>, UnsafePointer<vImage_Buffer>, vImagePixelCount, vImagePixelCount, UnsafePointer<Float>, vImagePixelCount, vImagePixelCount, vImage_Flags) -> vImage_Error`](/documentation/Accelerate/vImageDilate_PlanarF(_:_:_:_:_:_:_:_:))

Dilates a 32-bit planar buffer.

[`func vImageDilate_ARGB8888(UnsafePointer<vImage_Buffer>, UnsafePointer<vImage_Buffer>, vImagePixelCount, vImagePixelCount, UnsafePointer<UInt8>, vImagePixelCount, vImagePixelCount, vImage_Flags) -> vImage_Error`](/documentation/Accelerate/vImageDilate_ARGB8888(_:_:_:_:_:_:_:_:))

Dilates an 8-bit-per-channel, 4-channel interleaved buffer.

[`func vImageDilate_ARGBFFFF(UnsafePointer<vImage_Buffer>, UnsafePointer<vImage_Buffer>, vImagePixelCount, vImagePixelCount, UnsafePointer<Float>, vImagePixelCount, vImagePixelCount, vImage_Flags) -> vImage_Error`](/documentation/Accelerate/vImageDilate_ARGBFFFF(_:_:_:_:_:_:_:_:))

Dilates a 32-bit-per-channel, 4-channel interleaved buffer.

### Eroding an object

[`func vImageErode_Planar8(UnsafePointer<vImage_Buffer>, UnsafePointer<vImage_Buffer>, vImagePixelCount, vImagePixelCount, UnsafePointer<UInt8>, vImagePixelCount, vImagePixelCount, vImage_Flags) -> vImage_Error`](/documentation/Accelerate/vImageErode_Planar8(_:_:_:_:_:_:_:_:))

Erodes an 8-bit planar buffer.

[`func vImageErode_PlanarF(UnsafePointer<vImage_Buffer>, UnsafePointer<vImage_Buffer>, vImagePixelCount, vImagePixelCount, UnsafePointer<Float>, vImagePixelCount, vImagePixelCount, vImage_Flags) -> vImage_Error`](/documentation/Accelerate/vImageErode_PlanarF(_:_:_:_:_:_:_:_:))

Erodes a 32-bit planar buffer.

[`func vImageErode_ARGB8888(UnsafePointer<vImage_Buffer>, UnsafePointer<vImage_Buffer>, vImagePixelCount, vImagePixelCount, UnsafePointer<UInt8>, vImagePixelCount, vImagePixelCount, vImage_Flags) -> vImage_Error`](/documentation/Accelerate/vImageErode_ARGB8888(_:_:_:_:_:_:_:_:))

Erodes an 8-bit-per-channel, 4-channel interleaved buffer.

[`func vImageErode_ARGBFFFF(UnsafePointer<vImage_Buffer>, UnsafePointer<vImage_Buffer>, vImagePixelCount, vImagePixelCount, UnsafePointer<Float>, vImagePixelCount, vImagePixelCount, vImage_Flags) -> vImage_Error`](/documentation/Accelerate/vImageErode_ARGBFFFF(_:_:_:_:_:_:_:_:))

Erodes a 32-bit-per-channel, 4-channel interleaved buffer.

### Maximizing an object

[`func vImageMax_Planar8(UnsafePointer<vImage_Buffer>, UnsafePointer<vImage_Buffer>, UnsafeMutableRawPointer!, vImagePixelCount, vImagePixelCount, vImagePixelCount, vImagePixelCount, vImage_Flags) -> vImage_Error`](/documentation/Accelerate/vImageMax_Planar8(_:_:_:_:_:_:_:_:))

Maximizes an 8-bit planar buffer.

[`func vImageMax_PlanarF(UnsafePointer<vImage_Buffer>, UnsafePointer<vImage_Buffer>, UnsafeMutableRawPointer!, vImagePixelCount, vImagePixelCount, vImagePixelCount, vImagePixelCount, vImage_Flags) -> vImage_Error`](/documentation/Accelerate/vImageMax_PlanarF(_:_:_:_:_:_:_:_:))

Maximizes a 32-bit planar buffer.

[`func vImageMax_ARGB8888(UnsafePointer<vImage_Buffer>, UnsafePointer<vImage_Buffer>, UnsafeMutableRawPointer!, vImagePixelCount, vImagePixelCount, vImagePixelCount, vImagePixelCount, vImage_Flags) -> vImage_Error`](/documentation/Accelerate/vImageMax_ARGB8888(_:_:_:_:_:_:_:_:))

Maximizes an 8-bit-per-channel, 4-channel interleaved buffer.

[`func vImageMax_ARGBFFFF(UnsafePointer<vImage_Buffer>, UnsafePointer<vImage_Buffer>, UnsafeMutableRawPointer!, vImagePixelCount, vImagePixelCount, vImagePixelCount, vImagePixelCount, vImage_Flags) -> vImage_Error`](/documentation/Accelerate/vImageMax_ARGBFFFF(_:_:_:_:_:_:_:_:))

Maximizes a 32-bit-per-channel, 4-channel interleaved buffer.

### Minimizing an object

[`func vImageMin_Planar8(UnsafePointer<vImage_Buffer>, UnsafePointer<vImage_Buffer>, UnsafeMutableRawPointer!, vImagePixelCount, vImagePixelCount, vImagePixelCount, vImagePixelCount, vImage_Flags) -> vImage_Error`](/documentation/Accelerate/vImageMin_Planar8(_:_:_:_:_:_:_:_:))

Minimizes an 8-bit planar buffer.

[`func vImageMin_PlanarF(UnsafePointer<vImage_Buffer>, UnsafePointer<vImage_Buffer>, UnsafeMutableRawPointer!, vImagePixelCount, vImagePixelCount, vImagePixelCount, vImagePixelCount, vImage_Flags) -> vImage_Error`](/documentation/Accelerate/vImageMin_PlanarF(_:_:_:_:_:_:_:_:))

Minimizes a 32-bit planar buffer.

[`func vImageMin_ARGB8888(UnsafePointer<vImage_Buffer>, UnsafePointer<vImage_Buffer>, UnsafeMutableRawPointer!, vImagePixelCount, vImagePixelCount, vImagePixelCount, vImagePixelCount, vImage_Flags) -> vImage_Error`](/documentation/Accelerate/vImageMin_ARGB8888(_:_:_:_:_:_:_:_:))

Minimizes an 8-bit-per-channel, 4-channel interleaved buffer.

[`func vImageMin_ARGBFFFF(UnsafePointer<vImage_Buffer>, UnsafePointer<vImage_Buffer>, UnsafeMutableRawPointer!, vImagePixelCount, vImagePixelCount, vImagePixelCount, vImagePixelCount, vImage_Flags) -> vImage_Error`](/documentation/Accelerate/vImageMin_ARGBFFFF(_:_:_:_:_:_:_:_:))

Minimizes an 8-bit-per-channel, 4-channel interleaved buffer.

### Getting the minimum buffer size

Use the `kvImageGetTempBufferSize` flag with the appropriate morphological function

---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)