I have a list of strings like this
['standUp', 'front', 'lookU', 'lookF', 'lookDF', 'HandOnHipR']
I want to print it in the following manner on my video:
['standUp',
'front',
'lookU',
'lookF',
'lookDF',
'HandOnHipR']
I have tried this:
offset = 1
x, y = 5, 400
for idx, list in enumerate(lbls):
cv2.putText(frame, str(lbls), (x, y+offset*idx), font, 1, (0, 0, 255), 1)
The label is a list of lists mentioned at the top. I am confused with the org
argument in the putText()
.
cv2.putText(img, text, (org), font, fontScale, color, thickness, linetype)
img: your image
text: a string of text to print on image
org: bottom-left corner of the text string in the image (x,y)
font: font type
fontScale: font scale
color: text color (B,G,R)
thickness: text line thickness
lineType: line type (8)
import cv2
lbls = ['standUp', 'front', 'lookU', 'lookF', 'lookDF', 'HandOnHipR']
img = cv2.imread("road.jpg")
h,w,c = img.shape
offset = 0
font = cv2.FONT_HERSHEY_SIMPLEX
for itr, word in enumerate(lbls):
offset += int(h / len(lbls)) - 10
cv2.putText(img, word, (20, offset), font, 1, (0, 255, 0), 3)
cv2.imwrite("road_OUT.jpg", img)
The org
argument is used to choose the position of the text in the image, and the bottom left corner of the text is put at the point org
. If you want the text more to the right, you increase the x value, and if you want it lower, you increase the y value. So each line will be lower because you are increasing the y value with the offset*idx
.
As you have it, the second argument str(lbls)
will print out the entire array, that should be changed to the variable for the single element, which you have as list
. (However, it's best not to use list
as a variable because it will replace the built-in function list()
. I'll use lbl
instead.)
Here's an example where the words in the list are printed:
import cv2
import numpy as np
import matplotlib.pyplot as plt
frame = np.ones([400,400,3])*255
lbls = ['standUp', 'front', 'lookU', 'lookF', 'lookDF', 'HandOnHipR']
offset = 35
x,y = 50,50
for idx,lbl in enumerate(lbls):
cv2.putText(frame, str(lbl), (x,y+offset*idx), cv2.FONT_HERSHEY_SIMPLEX, 1, (0,0,0), 2)
plt.imshow(frame)
plt.show()
If you want to have the brackets and punctuation like you show above, you could possibly print them manually. The first and last elements would need to be printed separately:
cv2.putText(frame, '[\''+str(lbls[0])+'\',', (x,y), cv2.FONT_HERSHEY_SIMPLEX, 1, (0,0,0), 2)
for idx,lbl in enumerate(lbls[1:-1]):
cv2.putText(frame, '\''+str(lbl)+'\',', (x,y+offset*(idx+1)), cv2.FONT_HERSHEY_SIMPLEX, 1, (0,0,0), 2)
cv2.putText(frame, '\''+str(lbls[0])+'\']', (x,y+offset*(idx+2)), cv2.FONT_HERSHEY_SIMPLEX, 1, (0,0,0), 2)
Otherwise, you could change the elements to actually include the punctuation in them.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With