ImageManip.cpp
Go to the documentation of this file.
2 namespace dai {
3 namespace node {
4 
5 ImageManip::ImageManip(const std::shared_ptr<PipelineImpl>& par, int64_t nodeId) : ImageManip(par, nodeId, std::make_unique<ImageManip::Properties>()) {}
6 ImageManip::ImageManip(const std::shared_ptr<PipelineImpl>& par, int64_t nodeId, std::unique_ptr<Properties> props)
7  : NodeCRTP<Node, ImageManip, ImageManipProperties>(par, nodeId, std::move(props)),
8  rawConfig(std::make_shared<RawImageManipConfig>()),
9  initialConfig(rawConfig) {
11  setOutputRefs({&out});
12 }
13 
16  return properties;
17 }
18 
19 // Initial ImageManipConfig
20 void ImageManip::setCropRect(float xmin, float ymin, float xmax, float ymax) {
21  initialConfig.setCropRect(xmin, ymin, xmax, ymax);
23 }
24 
25 void ImageManip::setCenterCrop(float ratio, float whRatio) {
26  initialConfig.setCenterCrop(ratio, whRatio);
28 }
29 
30 void ImageManip::setResize(int w, int h) {
33 }
34 
35 void ImageManip::setResizeThumbnail(int w, int h, int bgRed, int bgGreen, int bgBlue) {
36  initialConfig.setResizeThumbnail(w, h, bgRed, bgGreen, bgBlue);
38 }
39 
43 }
44 
48 }
49 
53 }
54 
55 // Node properties configuration
58 }
59 
62 }
63 
64 void ImageManip::setNumFramesPool(int numFramesPool) {
65  properties.numFramesPool = numFramesPool;
66 }
67 
68 void ImageManip::setMaxOutputFrameSize(int maxFrameSize) {
69  properties.outputFrameSize = maxFrameSize;
70 }
71 
72 void ImageManip::setWarpMesh(const float* meshData, int numMeshPoints, int width, int height) {
73  if(numMeshPoints < width * height) {
74  throw std::invalid_argument("Not enough points provided for specified width and height");
75  }
76 
77  // TODO(themarpe) - optimize
78  Asset asset("mesh");
79  asset.alignment = 64;
80 
81  // Align stride to 16B
82  constexpr auto ALIGNMENT = 16;
83  size_t meshStride = ((size_t)((sizeof(Point2f) * width)) + (ALIGNMENT - 1)) & ~(ALIGNMENT - 1);
84  // Specify final mesh size
85  size_t meshSize = meshStride * height;
86 
87  // Create mesh data
88  asset.data = std::vector<uint8_t>(meshSize);
89 
90  // Fill out mesh points with stride
91  for(int i = 0; i < height; i++) {
92  for(int j = 0; j < width; j++) {
93  // get location in meshData
94  size_t inputMeshIndex = (i * width + j) * 2; // 2 float values per point
95 
96  // get output offset
97  size_t outputMeshOffset = (meshStride * i) + (j * sizeof(Point2f));
98  auto& point = reinterpret_cast<Point2f&>(asset.data.data()[outputMeshOffset]);
99 
100  // Asign reversed mesh coordinates (HW specified)
101  point.x = meshData[inputMeshIndex + 1];
102  point.y = meshData[inputMeshIndex + 0];
103  }
104  }
105 
106  properties.meshUri = assetManager.set(asset)->getRelativeUri();
107  properties.meshWidth = width;
108  properties.meshHeight = height;
109 }
110 
111 void ImageManip::setWarpMesh(const std::vector<Point2f>& meshData, int width, int height) {
112  setWarpMesh(reinterpret_cast<const float*>(meshData.data()), static_cast<int>(meshData.size()), width, height);
113 }
114 
115 void ImageManip::setWarpMesh(const std::vector<std::pair<float, float>>& meshData, int width, int height) {
116  setWarpMesh(reinterpret_cast<const float*>(meshData.data()), static_cast<int>(meshData.size()), width, height);
117 }
118 
119 } // namespace node
120 } // namespace dai
dai::NodeCRTP< Node, ImageManip, ImageManipProperties >::properties
Properties & properties
Underlying properties.
Definition: Node.hpp:346
dai::node::ImageManip::inputImage
Input inputImage
Definition: ImageManip.hpp:46
dai::Asset::alignment
std::uint32_t alignment
Definition: AssetManager.hpp:20
dai::node::ImageManip::setHorizontalFlip
void setHorizontalFlip(bool flip)
Definition: ImageManip.cpp:45
dai::ImageManipConfig::setCropRect
ImageManipConfig & setCropRect(float xmin, float ymin, float xmax, float ymax)
Definition: ImageManipConfig.cpp:18
dai::Node::setInputRefs
void setInputRefs(std::initializer_list< Input * > l)
dai::Node
Abstract Node.
Definition: Node.hpp:29
dai::node::ImageManip::setNumFramesPool
void setNumFramesPool(int numFramesPool)
Definition: ImageManip.cpp:64
dai::ImageManipConfig::setCenterCrop
ImageManipConfig & setCenterCrop(float ratio, float whRatio=1.0f)
Definition: ImageManipConfig.cpp:83
dai::RawImgFrame::Type
Type
Definition: RawImgFrame.hpp:13
dai::node::ImageManip::setKeepAspectRatio
void setKeepAspectRatio(bool keep)
Definition: ImageManip.cpp:50
dai::Node::Input::setWaitForMessage
void setWaitForMessage(bool waitForMessage)
Definition: Node.cpp:116
dai::ImageManipProperties
Definition: ImageManipProperties.hpp:12
dai::Node::assetManager
AssetManager assetManager
Definition: Node.hpp:291
dai::Asset::data
std::vector< std::uint8_t > data
Definition: AssetManager.hpp:19
dai::RawImageManipConfig
RawImageManipConfig structure.
Definition: RawImageManipConfig.hpp:20
dai::ImageManipProperties::meshWidth
int meshWidth
Custom warp mesh width. Set to zero to disable.
Definition: ImageManipProperties.hpp:23
dai::Point2f
Definition: Point2f.hpp:16
dai::node::ImageManip::setResizeThumbnail
void setResizeThumbnail(int w, int h, int bgRed=0, int bgGreen=0, int bgBlue=0)
Definition: ImageManip.cpp:35
dai::node::ImageManip::getWaitForConfigInput
bool getWaitForConfigInput() const
Definition: ImageManip.cpp:60
dai::NodeCRTP
Definition: Node.hpp:342
dai::ImageManipProperties::initialConfig
RawImageManipConfig initialConfig
Initial configuration for ImageManip node.
Definition: ImageManipProperties.hpp:14
dai::node::ImageManip::setCenterCrop
void setCenterCrop(float ratio, float whRatio=1.0f)
Definition: ImageManip.cpp:25
dai::ImageManipConfig::setHorizontalFlip
ImageManipConfig & setHorizontalFlip(bool flip)
Definition: ImageManipConfig.cpp:205
dai::Asset
Asset is identified with string key and can store arbitrary binary data.
Definition: AssetManager.hpp:15
dai::ImageManipConfig::setResize
ImageManipConfig & setResize(int w, int h)
Definition: ImageManipConfig.cpp:114
dai::ImageManipProperties::meshUri
std::string meshUri
Custom warp mesh uri. Set to empty string to disable.
Definition: ImageManipProperties.hpp:27
dai::ImageManipConfig::setFrameType
ImageManipConfig & setFrameType(ImgFrame::Type name)
Definition: ImageManipConfig.cpp:155
dai::node::ImageManip::setWarpMesh
void setWarpMesh(const float *meshData, int numMeshPoints, int width, int height)
Definition: ImageManip.cpp:72
dai::node::ImageManip::inputConfig
Input inputConfig
Definition: ImageManip.hpp:40
dai::AssetManager::set
std::shared_ptr< dai::Asset > set(Asset asset)
Definition: AssetManager.cpp:15
dai::node::ImageManip::setResize
void setResize(int w, int h)
Definition: ImageManip.cpp:30
dai::node::ImageManip::out
Output out
Definition: ImageManip.hpp:51
dai::ImageManipProperties::numFramesPool
int numFramesPool
Num frames in output pool.
Definition: ImageManipProperties.hpp:20
dai::node::ImageManip::setCropRect
void setCropRect(float xmin, float ymin, float xmax, float ymax)
Definition: ImageManip.cpp:20
nanorpc::core::detail::pack::meta::type
type
Definition: pack_meta.h:26
dai::Properties
Base Properties structure.
Definition: Properties.hpp:8
dai::node::ImageManip::setMaxOutputFrameSize
void setMaxOutputFrameSize(int maxFrameSize)
Definition: ImageManip.cpp:68
dai::node::ImageManip
ImageManip node. Capability to crop, resize, warp, ... incoming image frames.
Definition: ImageManip.hpp:15
dai::Node::setOutputRefs
void setOutputRefs(std::initializer_list< Output * > l)
dai::ImageManipProperties::outputFrameSize
int outputFrameSize
Maximum output frame size in bytes (eg: 300x300 BGR image -> 300*300*3 bytes)
Definition: ImageManipProperties.hpp:17
dai::ImageManipProperties::meshHeight
int meshHeight
Custom warp mesh height. Set to zero to disable.
Definition: ImageManipProperties.hpp:25
std
Definition: Node.hpp:366
dai::node::ImageManip::initialConfig
ImageManipConfig initialConfig
Definition: ImageManip.hpp:34
dai::Point2f::x
float x
Definition: Point2f.hpp:19
dai::node::ImageManip::ImageManip
ImageManip(const std::shared_ptr< PipelineImpl > &par, int64_t nodeId)
Definition: ImageManip.cpp:5
dai::node::ImageManip::getProperties
Properties & getProperties()
Definition: ImageManip.cpp:14
dai::node::ImageManip::setFrameType
void setFrameType(ImgFrame::Type name)
Definition: ImageManip.cpp:40
dai::ImageManipConfig::setKeepAspectRatio
ImageManipConfig & setKeepAspectRatio(bool keep)
Definition: ImageManipConfig.cpp:232
dai::node::ImageManip::rawConfig
std::shared_ptr< RawImageManipConfig > rawConfig
Definition: ImageManip.hpp:23
ImageManip.hpp
dai
Definition: CameraExposureOffset.hpp:6
dai::node::ImageManip::setWaitForConfigInput
void setWaitForConfigInput(bool wait)
Definition: ImageManip.cpp:56
dai::Node::Input::getWaitForMessage
bool getWaitForMessage() const
Definition: Node.cpp:120
dai::ImageManipConfig::setResizeThumbnail
ImageManipConfig & setResizeThumbnail(int w, int h, int bgRed=0, int bgGreen=0, int bgBlue=0)
Definition: ImageManipConfig.cpp:132


depthai
Author(s): Martin Peterlin
autogenerated on Sat Mar 22 2025 02:58:19