image_manip_example.cpp
Go to the documentation of this file.
1 #include <iostream>
2 
3 #include "utility.hpp"
4 
5 // Includes common necessary includes for development using depthai library
6 #include "depthai/depthai.hpp"
7 
8 int main() {
9  // Create pipeline
10  dai::Pipeline pipeline;
11 
12  // Define sources and outputs
13  auto camRgb = pipeline.create<dai::node::ColorCamera>();
14  auto imageManip = pipeline.create<dai::node::ImageManip>();
15  auto imageManip2 = pipeline.create<dai::node::ImageManip>();
16  auto camOut = pipeline.create<dai::node::XLinkOut>();
17  auto manipOut = pipeline.create<dai::node::XLinkOut>();
18  auto manipOut2 = pipeline.create<dai::node::XLinkOut>();
19  auto manip2In = pipeline.create<dai::node::XLinkIn>();
20 
21  camOut->setStreamName("preview");
22  manipOut->setStreamName("manip");
23  manipOut2->setStreamName("manip2");
24  manip2In->setStreamName("manip2In");
25 
26  // Properties
27  camRgb->setPreviewSize(304, 304);
29  camRgb->setInterleaved(false);
30  camRgb->setColorOrder(dai::ColorCameraProperties::ColorOrder::BGR);
31 
32  // Create a center crop image manipulation
33  imageManip->initialConfig.setCenterCrop(0.7f);
34  imageManip->initialConfig.setResizeThumbnail(300, 400);
35 
36  // Second image manipulator - Create a off center crop
37  imageManip2->initialConfig.setCropRect(0.1f, 0.1f, 0.3f, 0.3f);
38  imageManip2->inputConfig.setWaitForMessage(true);
39 
40  // Linking
41  camRgb->preview.link(camOut->input);
42  camRgb->preview.link(imageManip->inputImage);
43  imageManip->out.link(manipOut->input);
44  imageManip->out.link(imageManip2->inputImage);
45  imageManip2->out.link(manipOut2->input);
46  manip2In->out.link(imageManip2->inputConfig);
47 
48  // Connect to device and start pipeline
49  dai::Device device(pipeline);
50 
51  // Create input & output queues
52  auto previewQueue = device.getOutputQueue("preview", 8, false);
53  auto manipQueue = device.getOutputQueue("manip", 8, false);
54  auto manipQueue2 = device.getOutputQueue("manip2", 8, false);
55  auto manip2InQueue = device.getInputQueue("manip2In");
56 
57  // keep processing data
58  int frameCounter = 0;
59  float xmin = 0.1f;
60  float xmax = 0.3f;
61 
62  while(true) {
63  xmin += 0.003f;
64  xmax += 0.003f;
65  if(xmax >= 1.0f) {
66  xmin = 0.0f;
67  xmax = 0.2f;
68  }
69 
71  cfg.setCropRect(xmin, 0.1f, xmax, 0.3f);
72  manip2InQueue->send(cfg);
73 
74  // Gets both image frames
75  auto preview = previewQueue->get<dai::ImgFrame>();
76  auto manip = manipQueue->get<dai::ImgFrame>();
77  auto manip2 = manipQueue2->get<dai::ImgFrame>();
78 
79  auto matPreview = toMat(preview->getData(), preview->getWidth(), preview->getHeight(), 3, 1);
80  auto matManip = toMat(manip->getData(), manip->getWidth(), manip->getHeight(), 3, 1);
81  auto matManip2 = toMat(manip2->getData(), manip2->getWidth(), manip2->getHeight(), 3, 1);
82 
83  // Display both
84  cv::imshow("preview", matPreview);
85  cv::imshow("manip", matManip);
86  cv::imshow("manip2", matManip2);
87 
88  int key = cv::waitKey(1);
89  if(key == 'q') {
90  return 0;
91  }
92 
93  frameCounter++;
94  }
95  return 0;
96 }
main
int main()
Definition: image_manip_example.cpp:8
dai::node::XLinkOut
XLinkOut node. Sends messages over XLink.
Definition: XLinkOut.hpp:14
dai::Pipeline
Represents the pipeline, set of nodes and connections between them.
Definition: Pipeline.hpp:100
dai::node::ImageManip::inputImage
Input inputImage
Definition: ImageManip.hpp:46
dai::ImageManipConfig::setCropRect
ImageManipConfig & setCropRect(float xmin, float ymin, float xmax, float ymax)
Definition: ImageManipConfig.cpp:18
dai::Node::Input::setWaitForMessage
void setWaitForMessage(bool waitForMessage)
Definition: Node.cpp:116
dai::Buffer::getData
std::vector< std::uint8_t > & getData() const
Get non-owning reference to internal buffer.
Definition: Buffer.cpp:13
dai::node::ColorCamera
ColorCamera node. For use with color sensors.
Definition: ColorCamera.hpp:16
toMat
cv::Mat toMat(const std::vector< uint8_t > &data, int w, int h, int numPlanes, int bpp)
Definition: utility.cpp:45
dai::Device::getOutputQueue
std::shared_ptr< DataOutputQueue > getOutputQueue(const std::string &name)
Definition: Device.cpp:86
dai::ImgFrame::getHeight
unsigned int getHeight() const
Definition: pipeline/datatype/ImgFrame.cpp:56
dai::node::XLinkOut::input
Input input
Definition: XLinkOut.hpp:27
depthai.hpp
dai::Pipeline::create
std::shared_ptr< N > create()
Definition: Pipeline.hpp:145
dai::node::ImageManip::inputConfig
Input inputConfig
Definition: ImageManip.hpp:40
dai::node::ImageManip::out
Output out
Definition: ImageManip.hpp:51
dai::ColorCameraProperties::ColorOrder::BGR
@ BGR
dai::ImgFrame
Definition: ImgFrame.hpp:25
dai::node::ImageManip
ImageManip node. Capability to crop, resize, warp, ... incoming image frames.
Definition: ImageManip.hpp:15
dai::ColorCameraProperties::SensorResolution::THE_1080_P
@ THE_1080_P
1920 × 1080
dai::Device
Definition: Device.hpp:21
dai::node::ImageManip::initialConfig
ImageManipConfig initialConfig
Definition: ImageManip.hpp:34
dai::node::XLinkIn
XLinkIn node. Receives messages over XLink.
Definition: XLinkIn.hpp:14
dai::ImageManipConfig
Definition: ImageManipConfig.hpp:23
dai::Device::getInputQueue
std::shared_ptr< DataInputQueue > getInputQueue(const std::string &name)
Definition: Device.cpp:120
dai::node::XLinkOut::setStreamName
void setStreamName(const std::string &name)
Definition: XLinkOut.cpp:13
utility.hpp
dai::ImgFrame::getWidth
unsigned int getWidth() const
Definition: pipeline/datatype/ImgFrame.cpp:53
dai::ImageManipConfig::get
dai::RawImageManipConfig get() const
Definition: ImageManipConfig.cpp:288


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