此页面由 AI 自动翻译。查看英文原版

本页目录

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

ImageManip

Supported on:RVC2RVC4
ImageManip 节点可用于裁剪、旋转、翻转、调整大小、缩放、转换(类型)和变换 ImgFrames它是 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),您有三种主要选择:裁剪图像、拉伸图像或添加黑边。要使用 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 的分辨率技术

限制

除了上面提到的限制(不支持的帧格式)之外,还有其他限制:
  • 由于硬件变形限制,旋转/变形只能在宽度值为 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 CPU as backend preference
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)

需要帮助?

请前往 Discussion Forum 获取技术支持或提出您可能有的任何其他问题。