在OpenCV python的putText()中对齐文本

2024-10-02 18:17:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个这样的字符串列表

['standUp', 'front', 'lookU', 'lookF', 'lookDF', 'HandOnHipR']

我想用以下方式在我的视频上打印出来:

['standUp', 
'front', 
'lookU', 
'lookF', 
'lookDF', 
'HandOnHipR']

我试过这个:

   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)

标签是顶部提到的列表列表。我与putText()中的org参数混淆了。我很感激你的帮助。谢谢


Tags: 字符串列表for视频方式offsetfrontidx
2条回答

参数如下:

cv2.putText(img, text, (org), font, fontScale, color, thickness, linetype)

img:您的图像
文本:要在图像上打印的文本字符串
组织:图像中文本字符串的左下角(x,y)
字体:字体类型
字体比例:字体比例
颜色:文本颜色(B、G、R)
厚度:文本行厚度
线型:线型(8)

下面是一个可能有用的例子

测试图像:

enter image description here

代码:

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)

结果:

enter image description here

参数org用于选择文本在图像中的位置,文本的左下角放在点org处。如果希望文本更靠右,则增加x值;如果希望文本更低,则增加y值。所以每一行都会更低,因为您正在使用offset*idx增加y值。

正如您所拥有的,第二个参数str(lbls)将打印出整个数组,该数组应更改为单个元素的变量,您将其作为list。(但是,最好不要使用list作为变量,因为它将替换内置函数list()。我将使用lbl。)

下面是打印列表中单词的示例:

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()

enter image description here

如果您希望使用上面显示的括号和标点符号,则可以手动打印它们。第一个和最后一个元素需要单独打印:

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)

enter image description here

否则,可以将元素更改为实际包含标点符号。

相关问题 更多 >