本页目录

  • 如何放置
  • 输入与输出
  • 用法
  • 支持的图像格式
  • 操作顺序
  • 调整大小与宽高比处理
  • 限制
  • 功能示例
  • 参考

ImageManip

Supported on:RVC2RVC4
ImageManip 节点可用于裁剪、旋转、翻转、调整大小、缩放、转换(类型)和变换 ImgFrame它是 ImageManip (v1) 的更新版本,具有更清晰/更简洁的 API 和更多功能。

如何放置

Python

Python
1with dai.Pipeline() as pipeline:
2    manip = pipeline.create(dai.node.ImageManip)

C++

C++
1dai::Pipeline pipeline;
2auto manip = pipeline.create<dai::node::ImageManip>();

输入与输出

用法

Python

Python
1pipeline = dai.Pipeline()
2manip = pipeline.create(dai.node.ImageManip)
3
4manip.initialConfig.setResize(300, 300, dai.ImageManipConfig.ResizeMode.STRETCH)
5manip.initialConfig.setFrameType(dai.ImgFrame.Type.BGR888p)

C++

C++
1dai::Pipeline pipeline;
2auto manip = pipeline.create<dai::node::ImageManip>();
3
4manip->initialConfig.setResize(300, 300, dai::ImageManipConfig::ResizeMode::STRETCH);
5manip->initialConfig.setFrameType(dai::ImgFrame::Type::BGR888p);

支持的图像格式

ImageManip 节点支持以下图像格式(更多信息参见此 PR):
  • 支持的输入格式:RGB/BGR、平面/交错、YUV/NV12、RAW8 和 GRAY8
  • 转换为上述任何其他格式
  • 支持 RAW16(uint16,depth 输出),但不具备颜色转换能力
请注意,平面格式处理速度更快,因此应避免使用交错图像(例如 NV12 输入)。

操作顺序

操作顺序很重要,因为操作是按设置顺序应用的。例如下面的示例(来自 ImageManip 多操作)会先裁剪图像,然后垂直翻转:
Python
1manip = pipeline.create(dai.node.ImageManip)
2manip.initialConfig.addCrop(50, 100, 500, 500)
3manip.initialConfig.addFlipVertical()

调整大小与宽高比处理

当您的神经网络期望的宽高比与相机传感器不同时(例如 NN 期望 1:1,但传感器输出 4:3),您有三种主要选择:裁剪图像、拉伸图像或添加黑边(letterbox)。要使用 ImageManip 调整图像大小以用于神经网络输入或其他处理,请使用:
Python
1manip = pipeline.create(dai.node.ImageManip)
2manip.initialConfig.setOutputSize(width, height, dai.ImageManipConfig.ResizeMode)
可用的调整大小模式
模式保留宽高比全视场角优点缺点
CENTER_CROP对 NN 准确性最佳;保留宽高比裁剪图像;减少视场角
LETTERBOX保留宽高比和全视场角添加填充;NN 图像区域较小;可能降低 NN 准确性
STRETCH保留全视场角不保留宽高比;可能降低 NN 准确性
这些模式适用于处理 NN 输入形状与传感器原生宽高比不同的情况。更多信息请参阅NN 分辨率技术

限制

除了上述提到的限制(不支持的帧格式)之外,还有其他限制:
  • 由于硬件 warp 约束,旋转/扭曲只能应用于宽度值为 16 的倍数的帧
  • 帧的最大输出宽度为 4056 像素

功能示例

参考

class

dai::node::ImageManip

#include ImageManip.hpp
variable
std::shared_ptr< ImageManipConfig > initialConfig
Initial config to use when manipulating frames
variable
Input inputConfig
Input ImageManipConfig message with ability to modify parameters in runtime
variable
Input inputImage
Input image to be modified
variable
Output out
Outputs ImgFrame message that carries modified image.
function
ImageManip()
function
ImageManip(std::unique_ptr< Properties > props)
inline function
std::shared_ptr< ImageManip > build()
function
void setNumFramesPool(int numFramesPool)
Specify number of frames in pool.
Parameters
  • numFramesPool: How many frames should the pool have
function
void setMaxOutputFrameSize(int maxFrameSize)
Specify maximum size of output image.
Parameters
  • maxFrameSize: Maximum frame size in bytes
function
ImageManip & setRunOnHost(bool runOnHost)
Specify whether to run on host or device
Parameters
  • runOnHost: Run node on host
function
ImageManip & setBackend(Backend backend)
Set backend preference:
  • CPU: Run ImageManip on the CPU.
  • HW: Prefer the dedicated hardware image manipulation backend.
  • GPU: Prefer the GPU backend.
  • AUTO: Let the runtime select the backend automatically (GPU with CPU fallback).
Hardware-accelerated backends can cause some unexpected behavior when using multiple ImageManip nodes in series. Currently, the only operation affected is downscaling.
Parameters
  • backend: Backend preference
function
ImageManip & setPerformanceMode(PerformanceMode performanceMode)
Set performance mode
Parameters
  • performanceMode: Performance mode
function
bool runOnHost()
Check if the node is set to run on host
function
void run()
inline function
DeviceNodeCRTP()
inline function
DeviceNodeCRTP(const std::shared_ptr< Device > & device)
inline function
DeviceNodeCRTP(std::unique_ptr< Properties > props)
inline function
DeviceNodeCRTP(std::unique_ptr< Properties > props, bool confMode)
inline function
DeviceNodeCRTP(const std::shared_ptr< Device > & device, std::unique_ptr< Properties > props, bool confMode)

需要帮助?

请前往 OAKChina 官网 获取技术支持或解答您的任何疑问。