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

时间:2018-11-02 02:13:08

标签: python opencv

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

['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)

我已经尝试过了:

{{1}}

标签是顶部提到的列表的列表。我对putText()中的org参数感到困惑。我将不胜感激。谢谢

2 个答案:

答案 0 :(得分:2)

参数如下:

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

img :您的图片
文本:要在图像上打印的文本字符串
org :图像中文本字符串的左下角(x,y)
字体:字体类型
fontScale :字体比例
颜色:文本颜色(B,G,R)
厚度:文本行粗细
lineType :线型(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

答案 1 :(得分: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

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