对齐OpenCV中putText()中的文本

2024-10-02 18:26:58 发布

您现在位置: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条回答

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

否则,您可以更改元素,使其实际包含标点符号

参数如下:

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

img:您的图像
文本:要在图像上打印的文本字符串
org:图像中文本字符串的左下角(x,y)
font:字体类型
fontScale:字体比例
颜色:文本颜色(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

相关问题 更多 >