1
+ //======= Copyright (c) Stereolabs Corporation, All rights reserved. ===============
2
+ using System ;
3
+ using System . Numerics ;
4
+ using System . Runtime . InteropServices ;
5
+ using System . Threading . Tasks ;
6
+ using OpenCvSharp ;
7
+
8
+ namespace sl
9
+ {
10
+ public class Utils
11
+ {
12
+ /// <summary>
13
+ /// Creates an OpenCV version of a ZED Mat.
14
+ /// </summary>
15
+ /// <param name="zedmat">Source ZED Mat.</param>
16
+ /// <param name="zedmattype">Type of ZED Mat - data type and channel number.
17
+ /// <returns></returns>
18
+ public static OpenCvSharp . Mat SLMat2CVMat ( ref sl . Mat zedmat , MAT_TYPE zedmattype )
19
+ {
20
+ int cvmattype = SLMatType2CVMatType ( zedmattype ) ;
21
+ OpenCvSharp . Mat cvmat = new OpenCvSharp . Mat ( zedmat . GetHeight ( ) , zedmat . GetWidth ( ) , cvmattype , zedmat . GetPtr ( ) ) ;
22
+
23
+ return cvmat ;
24
+ }
25
+
26
+ /// <summary>
27
+ /// Returns the OpenCV type that corresponds to a given ZED Mat type.
28
+ /// </summary>
29
+ private static int SLMatType2CVMatType ( MAT_TYPE zedmattype )
30
+ {
31
+ switch ( zedmattype )
32
+ {
33
+ case sl . MAT_TYPE . MAT_32F_C1 :
34
+ return OpenCvSharp . MatType . CV_32FC1 ;
35
+ case sl . MAT_TYPE . MAT_32F_C2 :
36
+ return OpenCvSharp . MatType . CV_32FC2 ;
37
+ case sl . MAT_TYPE . MAT_32F_C3 :
38
+ return OpenCvSharp . MatType . CV_32FC3 ;
39
+ case sl . MAT_TYPE . MAT_32F_C4 :
40
+ return OpenCvSharp . MatType . CV_32FC4 ;
41
+ case sl . MAT_TYPE . MAT_8U_C1 :
42
+ return OpenCvSharp . MatType . CV_8UC1 ;
43
+ case sl . MAT_TYPE . MAT_8U_C2 :
44
+ return OpenCvSharp . MatType . CV_8UC2 ;
45
+ case sl . MAT_TYPE . MAT_8U_C3 :
46
+ return OpenCvSharp . MatType . CV_8UC3 ;
47
+ case sl . MAT_TYPE . MAT_8U_C4 :
48
+ return OpenCvSharp . MatType . CV_8UC4 ;
49
+ default :
50
+ return - 1 ;
51
+ }
52
+ }
53
+
54
+ public static ulong getMilliseconds ( ulong ts_ns )
55
+ {
56
+ return ts_ns / 1000000 ;
57
+ }
58
+
59
+ public static void drawVerticalLine ( ref OpenCvSharp . Mat left_display , Point start_pt , Point end_pt , Scalar clr , int thickness )
60
+ {
61
+ int n_steps = 7 ;
62
+ Point pt1 , pt4 ;
63
+ pt1 . X = ( ( n_steps - 1 ) * start_pt . X + end_pt . X ) / n_steps ;
64
+ pt1 . Y = ( ( n_steps - 1 ) * start_pt . Y + end_pt . Y ) / n_steps ;
65
+
66
+ pt4 . X = ( start_pt . X + ( n_steps - 1 ) * end_pt . X ) / n_steps ;
67
+ pt4 . Y = ( start_pt . Y + ( n_steps - 1 ) * end_pt . Y ) / n_steps ;
68
+
69
+ Cv2 . Line ( left_display , start_pt , pt1 , clr , thickness ) ;
70
+ Cv2 . Line ( left_display , pt4 , end_pt , clr , thickness ) ;
71
+ }
72
+
73
+ public static Point cvt ( Vector2 pt , sl . float2 scale )
74
+ {
75
+ return new Point ( pt . X * scale . x , pt . Y * scale . y ) ;
76
+ }
77
+
78
+ public static sl . float4 generateColorID ( int idx )
79
+ {
80
+ int offset = Math . Max ( 0 , idx % 5 ) ;
81
+ sl . float4 color = new float4 ( ) ;
82
+ color . x = id_colors [ offset , 0 ] ;
83
+ color . y = id_colors [ offset , 1 ] ;
84
+ color . z = id_colors [ offset , 2 ] ;
85
+ color . w = 1.0f ;
86
+ return color ;
87
+ }
88
+
89
+ public static OpenCvSharp . Scalar generateColorID_u ( int idx )
90
+ {
91
+ int offset = Math . Max ( 0 , idx % 5 ) ;
92
+ OpenCvSharp . Scalar color = new OpenCvSharp . Scalar ( ) ;
93
+ color [ 0 ] = id_colors [ offset , 2 ] * 255 ;
94
+ color [ 1 ] = id_colors [ offset , 1 ] * 255 ;
95
+ color [ 2 ] = id_colors [ offset , 0 ] * 255 ;
96
+ color [ 3 ] = 1.0f * 255 ;
97
+ return color ;
98
+ }
99
+
100
+ public static float [ , ] id_colors = new float [ 5 , 3 ] {
101
+
102
+ { .231f , .909f , .69f } ,
103
+ { .098f , .686f , .816f } ,
104
+ { .412f , .4f , .804f } ,
105
+ { 1 , .725f , .0f } ,
106
+ { .989f , .388f , .419f }
107
+ } ;
108
+
109
+ public static float [ , ] class_colors = new float [ 6 , 3 ] {
110
+ { 44.0f , 117.0f , 255.0f } , // PEOPLE
111
+ { 255.0f , 0.0f , 255.0f } , // VEHICLE
112
+ { 0.0f , 0.0f , 255.0f } ,
113
+ { 0.0f , 255.0f , 255.0f } ,
114
+ { 0.0f , 255.0f , 0.0f } ,
115
+ { 255.0f , 255.0f , 255.0f }
116
+ } ;
117
+
118
+ public static float4 generateColorClass ( int idx )
119
+ {
120
+ idx = Math . Min ( 5 , idx ) ;
121
+ sl . float4 color = new float4 ( ) ;
122
+ color . x = class_colors [ idx , 0 ] ;
123
+ color . y = class_colors [ idx , 1 ] ;
124
+ color . z = class_colors [ idx , 2 ] ;
125
+ color . w = 255.0f ;
126
+ return color ;
127
+ }
128
+
129
+ public static OpenCvSharp . Scalar generateColorClass_u ( int idx )
130
+ {
131
+ idx = Math . Min ( 5 , idx ) ;
132
+ OpenCvSharp . Scalar color = new OpenCvSharp . Scalar ( ) ;
133
+ color [ 0 ] = class_colors [ idx , 0 ] ;
134
+ color [ 0 ] = class_colors [ idx , 1 ] ;
135
+ color [ 0 ] = class_colors [ idx , 2 ] ;
136
+ color [ 0 ] = 255.0f ;
137
+ return color ;
138
+ }
139
+
140
+ public static bool renderObject ( ObjectData i , bool showOnlyOK )
141
+ {
142
+ if ( showOnlyOK )
143
+ return ( i . objectTrackingState == sl . OBJECT_TRACKING_STATE . OK ) ;
144
+ else
145
+ return ( i . objectTrackingState == sl . OBJECT_TRACKING_STATE . OK || i . objectTrackingState == sl . OBJECT_TRACKING_STATE . OFF ) ;
146
+ }
147
+
148
+
149
+ public static byte _applyFading ( double val , float current_alpha , double current_clr )
150
+ {
151
+ return ( byte ) ( current_alpha * current_clr + ( 1.0 - current_alpha ) * val ) ;
152
+ }
153
+
154
+ public static Vec4b applyFading ( Scalar val , float current_alpha , Scalar current_clr ) {
155
+ Vec4b out_ = new Vec4b ( ) ;
156
+ out_ [ 0 ] = _applyFading ( val [ 0 ] , current_alpha , current_clr [ 0 ] ) ;
157
+ out_ [ 1 ] = _applyFading ( val [ 1 ] , current_alpha , current_clr [ 1 ] ) ;
158
+ out_ [ 2 ] = _applyFading ( val [ 2 ] , current_alpha , current_clr [ 2 ] ) ;
159
+ out_ [ 3 ] = 255 ;
160
+ return out_ ;
161
+ }
162
+ }
163
+ }
0 commit comments