-
Notifications
You must be signed in to change notification settings - Fork 3
/
utils.py
59 lines (53 loc) · 1.85 KB
/
utils.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import datetime
import cv2
import numpy as np
def writeOSD(image, lines, size=0.04):
"""Write text given in *lines* iterable,
the height of each line determined by *size* as
proportion of image height."""
# Compute row height at scale 1.0 first.
(letter_width, letter_height), baseline = cv2.getTextSize(
text='I',
fontFace=cv2.FONT_HERSHEY_SIMPLEX,
fontScale=1.0,
thickness=1)
# Compute actual scale to match desired height.
image_height = np.shape(image)[0]
line_height = int(image_height * size)
scale = float(line_height) / letter_height
# Deterimine base thickness, based on scale.
thickness = int(scale * 4)
# Increase line height, to account for thickness.
line_height += thickness * 3
# Iterate the lines of text, and draw them.
xoffset = int(letter_width * scale)
yoffset = line_height
for line in lines:
cv2.putText( # Draw the drop shadow.
image,
text=line,
org=(int(xoffset+max(1, thickness/2)), int(yoffset+max(1, thickness/2))),
fontFace=cv2.FONT_HERSHEY_SIMPLEX,
fontScale=scale,
color=(0, 0, 0),
thickness=thickness,
)
cv2.putText( # Draw the text body.
image,
text=line,
org=(xoffset, yoffset),
fontFace=cv2.FONT_HERSHEY_SIMPLEX,
fontScale=scale,
color=(215, 215, 70),
thickness=thickness,
)
cv2.putText( # Draw the highlight.
image,
text=line,
org=(int(xoffset-max(1, thickness/3)), int(yoffset-max(1, thickness/3))),
fontFace=cv2.FONT_HERSHEY_SIMPLEX,
fontScale=scale,
color=(245, 255, 200),
thickness=int(thickness/3),
)
yoffset += line_height