❷Warp 节点
Warp 节点用于图像扭曲和反扭曲,可用于消除来自宽 FOV 相机的图像的扭曲。该节点还可用于对图像应用透视变换。
与 ImageManip 节点(setWarpMesh () 函数)相比:
Warp 节点使用底层 warp HW 块,没有额外的资源(SHAVE/cmx 内核)。
硬件限制:宽度必须能被 16 整除。
ImageManip 节点将 warp HW 块的强大功能与 CMX 内存的效率相结合,以实现更高的吞吐量(例如 4k@30 fps)。 HW 块的调度由 SHAVE 内核完成,它还进行颜色空间转换、类型转换(YUV420 到 NV12)等。使用 ImageManip 节点的缺点是额外的 RAM 和 SHAVE 使用。
▌如何放置
Python
pipeline = dai.Pipeline()
warp = pipeline.create(dai.node.Warp)
C++
dai::Pipeline pipeline;
auto warp = pipeline.create<dai::node::Warp>();
▌输入和输出
┌────────────┐
inputImage │ │ out
──────────►│ Warp ├──────►
│ │
└────────────┘
消息类型
▌用法
Python
pipeline = dai.Pipeline()
warp = pipeline.create(dai.node.Warp)
# 创建一个自定义的 Warp Mash
p1 = dai.Point2f(20, 20)
p2 = dai.Point2f(460, 20)
p3 = dai.Point2f(20, 460)
p4 = dai.Point2f(460, 460)
warp.setWarpMesh([p1,p2,p3,p4], 2, 2)
warp.setOutputSize((512,512))
warp.setMaxOutputFrameSize(512 * 512 * 3)
# 要使用的 Warp 引擎 (0,1,2)
warp.setHwIds([1])
# Warp 插值模式,在BILINEAR, BICUBIC, BYPASS之间选择
warp.setInterpolation(dai.node.Warp.Properties.Interpolation.BYPASS)
C++
dai::Pipeline pipeline;
auto warp = pipeline.create<dai::node::Warp>();
// 创建一个自定义的 Warp Mash
dai::Point2f p1(20, 20);
dai::Point2f p2(460, 20);
dai::Point2f p3(20, 460);
dai::Point2f p4(460, 460);
warp->setWarpMesh({p1,p2,p3,p4}, 2, 2);
warp->setOutputSize({512, 512});
warp->setMaxOutputFrameSize(512 * 512 * 3);
// 要使用的 Warp 引擎 (0,1,2)
warp->setHwIds({1});
// Warp 插值模式,在BILINEAR, BICUBIC, BYPASS之间选择
warp->setInterpolation(dai::node::Warp::Properties::Interpolation::BYPASS);
▌功能示例
- Warp Mesh: 此示例显示了使用 Warp 节点来扭曲输入图像帧。
- Interactive Warp Mesh: 此示例显示了使用 Warp 节点来扭曲输入图像帧。它让您交互式地改变网格点来扭曲图像。更改点后,用户必须按 r 重新启动管道并应用更改。
▌参考
https://docs.luxonis.com/projects/api/en/latest/components/nodes/warp/#reference