ImageManip¶
ImageManip node can be used to crop, rotate rectangle area or perform various image transforms: rotate, mirror, flip, perspective transform.
For downscaling, ImageManip uses the bilinear/bicubic interpolation.
How to place it¶
pipeline = dai.Pipeline()
manip = pipeline.create(dai.node.ImageManip)
dai::Pipeline pipeline;
auto manip = pipeline.create<dai::node::ImageManip>();
Inputs and Outputs¶
┌───────────────────┐
inputImage │ │
──────────────►│ │
│ │ out
│ ImageManip ├───────────►
inputConfig │ │
──────────────►│ │
│ │
└───────────────────┘
Message types
inputImage
- ImgFrameinputConfig
- ImageManipConfigout
- ImgFrame
Usage¶
pipeline = dai.Pipeline()
manip = pipeline.create(dai.node.ImageManip)
manip.initialConfig.setResize(300, 300)
manip.initialConfig.setFrameType(dai.ImgFrame.Type.BGR888p)
dai::Pipeline pipeline;
auto manip = pipeline.create<dai::node::ImageManip>();
manip->initialConfig.setResize(300, 300);
manip->initialConfig.setFrameType(dai::ImgFrame::Type::BGR888p);
Image formats supported¶
ImageManip node supports the following image formats (more info in PR here):
Input formats supported: RGB/BGR, planar/interleaved, YUV/NV12, RAW8 and GRAY8
Convert format to any other format mentioned above
RAW16 (uint16,
depth
output) supported, but without color conversion capability
Note that planar formats are faster to process, so interleaved images should be avoided (eg. NV12 input).
Limitations¶
Besides limitations mentioned above (unsupported frame formats), there are other limitations:
Due to HW warp constraint, rotating/warping can be done only on frames whose width values are multiples of 16
Maximum output width of a frame is 4056 pixels
Examples of functionality¶
ImageManip Tiling - Using ImageManip for frame tiling
ImageManip Rotate - Using ImageManip to rotate color/mono frames
Reference¶
-
class
depthai.node.
ImageManip
ImageManip node. Capability to crop, resize, warp, … incoming image frames
-
class
Connection
Connection between an Input and Output
-
class
Id
Node identificator. Unique for every node on a single Pipeline
-
getAssetManager
(*args, **kwargs) Overloaded function.
getAssetManager(self: depthai.Node) -> depthai.AssetManager
Get node AssetManager as a const reference
getAssetManager(self: depthai.Node) -> depthai.AssetManager
Get node AssetManager as a const reference
-
getInputRefs
(*args, **kwargs) Overloaded function.
getInputRefs(self: depthai.Node) -> List[depthai.Node.Input]
Retrieves reference to node inputs
getInputRefs(self: depthai.Node) -> List[depthai.Node.Input]
Retrieves reference to node inputs
-
getInputs
(self: depthai.Node) → List[depthai.Node.Input] Retrieves all nodes inputs
-
getName
(self: depthai.Node) → str Retrieves nodes name
-
getOutputRefs
(*args, **kwargs) Overloaded function.
getOutputRefs(self: depthai.Node) -> List[depthai.Node.Output]
Retrieves reference to node outputs
getOutputRefs(self: depthai.Node) -> List[depthai.Node.Output]
Retrieves reference to node outputs
-
getOutputs
(self: depthai.Node) → List[depthai.Node.Output] Retrieves all nodes outputs
-
getParentPipeline
(*args, **kwargs) Overloaded function.
getParentPipeline(self: depthai.Node) -> depthai.Pipeline
getParentPipeline(self: depthai.Node) -> depthai.Pipeline
-
getWaitForConfigInput
(self: depthai.node.ImageManip) → bool See also
setWaitForConfigInput
- Returns
True if wait for inputConfig message, false otherwise
-
property
id
Id of node
-
property
initialConfig
Initial config to use when manipulating frames
-
property
inputConfig
Input ImageManipConfig message with ability to modify parameters in runtime Default queue is blocking with size 8
-
property
inputImage
Input image to be modified Default queue is blocking with size 8
-
property
out
Outputs ImgFrame message that carries modified image.
-
setCenterCrop
(self: depthai.node.ImageManip, arg0: float, arg1: float) → None
-
setCropRect
(self: depthai.node.ImageManip, arg0: float, arg1: float, arg2: float, arg3: float) → None
-
setFrameType
(self: depthai.node.ImageManip, arg0: depthai.RawImgFrame.Type) → None
-
setHorizontalFlip
(self: depthai.node.ImageManip, arg0: bool) → None
-
setKeepAspectRatio
(self: depthai.node.ImageManip, arg0: bool) → None
-
setMaxOutputFrameSize
(self: depthai.node.ImageManip, arg0: int) → None Specify maximum size of output image.
- Parameter
maxFrameSize
: Maximum frame size in bytes
- Parameter
-
setNumFramesPool
(self: depthai.node.ImageManip, arg0: int) → None Specify number of frames in pool.
- Parameter
numFramesPool
: How many frames should the pool have
- Parameter
-
setResize
(self: depthai.node.ImageManip, arg0: int, arg1: int) → None
-
setResizeThumbnail
(self: depthai.node.ImageManip, arg0: int, arg1: int, arg2: int, arg3: int, arg4: int) → None
-
setWaitForConfigInput
(self: depthai.node.ImageManip, wait: bool) → None Specify whether or not wait until configuration message arrives to inputConfig Input.
- Parameter
wait
: True to wait for configuration message, false otherwise.
- Parameter
-
setWarpMesh
(*args, **kwargs) Overloaded function.
setWarpMesh(self: depthai.node.ImageManip, arg0: List[depthai.Point2f], arg1: int, arg2: int) -> None
setWarpMesh(self: depthai.node.ImageManip, arg0: List[Tuple[float, float]], arg1: int, arg2: int) -> None
-
class
-
class
dai::node
::
ImageManip
: public dai::NodeCRTP<Node, ImageManip, ImageManipProperties>¶ ImageManip node. Capability to crop, resize, warp, … incoming image frames.
Public Functions
-
void
setCropRect
(float xmin, float ymin, float xmax, float ymax)¶
-
void
setCenterCrop
(float ratio, float whRatio = 1.0f)¶
-
void
setResize
(int w, int h)¶
-
void
setResizeThumbnail
(int w, int h, int bgRed = 0, int bgGreen = 0, int bgBlue = 0)¶
-
void
setHorizontalFlip
(bool flip)¶
-
void
setKeepAspectRatio
(bool keep)¶
-
void
setWaitForConfigInput
(bool wait)¶ Specify whether or not wait until configuration message arrives to inputConfig Input.
- Parameters
wait
: True to wait for configuration message, false otherwise.
-
bool
getWaitForConfigInput
() const¶ - See
- Return
True if wait for inputConfig message, false otherwise
-
void
setNumFramesPool
(int numFramesPool)¶ Specify number of frames in pool.
- Parameters
numFramesPool
: How many frames should the pool have
-
void
setMaxOutputFrameSize
(int maxFrameSize)¶ Specify maximum size of output image.
- Parameters
maxFrameSize
: Maximum frame size in bytes
-
void
setWarpMesh
(const std::vector<Point2f> &meshData, int width, int height)¶ Set a custom warp mesh
- Parameters
meshData
: 2D plane of mesh points, starting from top left to bottom rightwidth
: Width of meshheight
: Height of mesh
-
void
setWarpMesh
(const std::vector<std::pair<float, float>> &meshData, int width, int height)¶
Public Members
-
ImageManipConfig
initialConfig
¶ Initial config to use when manipulating frames
-
Input
inputConfig
= {*this, "inputConfig", Input::Type::SReceiver, true, 8, {{DatatypeEnum::ImageManipConfig, true}}}¶ Input ImageManipConfig message with ability to modify parameters in runtime Default queue is blocking with size 8
-
Input
inputImage
= {*this, "inputImage", Input::Type::SReceiver, true, 8, true, {{DatatypeEnum::ImgFrame, true}}}¶ Input image to be modified Default queue is blocking with size 8
-
Output
out
= {*this, "out", Output::Type::MSender, {{DatatypeEnum::ImgFrame, true}}}¶ Outputs ImgFrame message that carries modified image.
Public Static Attributes
-
static constexpr const char *
NAME
= "ImageManip"¶
Private Functions
-
void
setWarpMesh
(const float *meshData, int numMeshPoints, int width, int height)¶
Private Members
-
std::shared_ptr<RawImageManipConfig>
rawConfig
¶
-
void
Got questions?
We’re always happy to help with code or other questions you might have.