OpenCV putText()换行符号

时间:2014-12-25 13:01:14

标签: python opencv

我正在使用cv2.putText()在图像上绘制文本字符串。

当我写:

cv2.putText(img, "This is \n some text", (50,50), cv2.FONT_HERSHEY_SIMPLEX, 1, 2)

图像上绘制的文字是:

This is ? some text

我原本期望在新行中打印文字,因为\n是换行符的转义字符,但它会在图片上绘制?

为什么会这样?难道我做错了什么 ?

4 个答案:

答案 0 :(得分:27)

不幸的是putText无法正确处理\n个符号。请参阅relevant rejected pull request。您需要自己拆分文本并进行多次putText调用,例如:

text = "This is \n some text"
y0, dy = 50, 4
for i, line in enumerate(text.split('\n')):
    y = y0 + i*dy
    cv2.putText(img, line, (50, y ), cv2.FONT_HERSHEY_SIMPLEX, 1, 2)

答案 1 :(得分:1)

如果要将多行数据添加到视频的帧中,则必须添加多行putText(),即使上述带有for循环的答案也行不通。

您可以做的是利用python中的“ exec”函数,它将字符串作为输入并将其呈现为代码。

因此,我建议通过使用for循环附加所有行来创建一个小的python代码段作为字符串,并在所需的位置执行它,它也会显示在不同的位置。这种情况对我来说可以为视频添加数据。

stringexec = ""
m=0
for i in TextList:
    stringexec = steval+"cv2.putText(frame, TextList[" + str(TextList.index(i))+"], (100, 100+"+str(m)+"), cv2.FONT_HERSHEY_COMPLEX, 0.5, (200, 100, 100), 1, cv2.LINE_AA)\n"
    m += 100
exec(stringexec)

答案 2 :(得分:0)

这是另一个例子:

https://gist.github.com/EricCousineau-TRI/596f04c83da9b82d0389d3ea1d782592

基本上,与elyase的答案相同,但也使用getTextSize()(尽管我不得不将行大小增加一些,超出预期)。

答案 3 :(得分:0)

elyase 提出的方法在 OpenCV 4.5.1.38 中对我很有效。我确实验证了文本字符串仍然可以用“+”连接,并且可以使用“str(value)”插入数值。换行符的开头只是以“\n”开头,一切都按预期运行。

y0, dy, text = 185,50, "FPS: "+str(framerate)+"\nMIN: "+str(frMIN)+"\nMAX: "+str(frMAX)+"\nAVG: "+str(frAVG)
for i, line in enumerate(text.split('\n')):
    y = y0 + i*dy
    cv2.putText(currStack, line, (50, y ), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2, cv2.LINE_AA, False)