【问题标题】:OpenCV putText() new line characterOpenCV putText() 换行符
【发布时间】:2015-02-23 04:37:50
【问题描述】:

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

当我写的时候:

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

图像上绘制的文字是:

This is ? some text

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

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

【问题讨论】:

  • putText 可以做字母、数字和一些符号,比如 =!* 。不多了。

标签: python opencv


【解决方案1】:

很遗憾,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)

【讨论】:

【解决方案2】:

这是另一个例子:

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

基本上,与 elyase 的回答相同,但也使用了 getTextSize()(尽管我不得不将行号增加得比预期的要大一些)。

【讨论】:

    【解决方案3】:

    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)
    

    【讨论】:

      猜你喜欢
      • 2013-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-28
      • 1970-01-01
      • 1970-01-01
      • 2013-06-23
      • 2020-10-28
      相关资源
      最近更新 更多