Pipeline
Source code
Python
C++
Python
PythonGitHub
1import depthai as dai
2import cv2
3import numpy as np
4
5def draw_rotated_rectangle(frame, center, size, angle, color, thickness=2):
6 """
7 Draws a rotated rectangle on the given frame.
8
9 Args:
10 frame (numpy.ndarray): The image/frame to draw on.
11 center (tuple): The (x, y) coordinates of the rectangle's center.
12 size (tuple): The (width, height) of the rectangle.
13 angle (float): The rotation angle of the rectangle in degrees (counter-clockwise).
14 color (tuple): The color of the rectangle in BGR format (e.g., (0, 255, 0) for green).
15 thickness (int): The thickness of the rectangle edges. Default is 2.
16 """
17 # Create a rotated rectangle
18 rect = ((center[0], center[1]), (size[0], size[1]), angle)
19
20 # Get the four vertices of the rotated rectangle
21 box = cv2.boxPoints(rect)
22 box = np.intp(box) # Convert to integer coordinates
23
24 # Draw the rectangle on the frame
25 cv2.polylines(frame, [box], isClosed=True, color=color, thickness=thickness)
26
27with dai.Pipeline() as pipeline:
28 cam = pipeline.create(dai.node.Camera).build()
29 camOut = cam.requestOutput((640, 400), dai.ImgFrame.Type.BGR888i, fps = 30.0)
30 manip1 = pipeline.create(dai.node.ImageManip)
31 manip2 = pipeline.create(dai.node.ImageManip)
32
33 camOut.link(manip1.inputImage)
34 manip1.out.link(manip2.inputImage)
35
36 manip1.initialConfig.addRotateDeg(90)
37 manip1.initialConfig.setOutputSize(200, 320)
38
39 manip2.initialConfig.addRotateDeg(90)
40 manip2.initialConfig.setOutputSize(320, 200)
41 manip2.setRunOnHost(True)
42
43 outQcam = camOut.createOutputQueue()
44 outQ1 = manip1.out.createOutputQueue()
45 outQ2 = manip2.out.createOutputQueue()
46
47 pipeline.start()
48
49 while True:
50 camFrame: dai.ImgFrame = outQcam.get()
51 manip1Frame: dai.ImgFrame = outQ1.get()
52 manip2Frame: dai.ImgFrame = outQ2.get()
53
54 camCv = camFrame.getCvFrame()
55 manip1Cv = manip1Frame.getCvFrame()
56 manip2Cv = manip2Frame.getCvFrame()
57
58 rect2 = dai.RotatedRect(dai.Rect(dai.Point2f(100, 100), dai.Point2f(200, 150)), 0)
59 rect1 = manip2Frame.getTransformation().remapRectTo(manip1Frame.getTransformation(), rect2)
60 rectcam = manip1Frame.getTransformation().remapRectTo(camFrame.getTransformation(), rect1)
61
62 draw_rotated_rectangle(manip2Cv, (rect2.center.x, rect2.center.y), (rect2.size.width, rect2.size.height), rect2.angle, (255, 0, 0))
63 draw_rotated_rectangle(manip1Cv, (rect1.center.x, rect1.center.y), (rect1.size.width, rect1.size.height), rect1.angle, (255, 0, 0))
64 draw_rotated_rectangle(camCv, (rectcam.center.x, rectcam.center.y), (rectcam.size.width, rectcam.size.height), rectcam.angle, (255, 0, 0))
65
66 cv2.imshow("cam", camCv)
67 cv2.imshow("manip1", manip1Cv)
68 cv2.imshow("manip2", manip2Cv)
69 if cv2.waitKey(1) == ord('q'):
70 breakNeed assistance?
Head over to Discussion Forum for technical support or any other questions you might have.