OpenCV putText() новый символ строки

Я использую cv2.putText() для рисования текстовой строки на изображении.

Когда я пишу:

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

Текст, нарисованный на изображении:

This is ? some text

Я ожидал, что текст будет напечатан в новой строке, поскольку \n является escape-символом для новой строки, но вместо этого рисует ?.

Почему это происходит? Я делаю что-то неправильно?

Ответ 1

К сожалению, putText неправильно обрабатывает символы \n. См. релевантный запрос на отклонение. Вам нужно разделить текст самостоятельно и сделать несколько вызовов 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

Если вы собираетесь добавить данные из нескольких строк в кадры видео, то вам нужно добавить несколько строк метода putText(), даже если вышеуказанный ответ с циклом for не сработает.

Что вы можете сделать, так это использовать функцию "exec" в python, которая будет принимать строку в качестве входных данных и отображать их в коде.

Поэтому я предлагаю создать небольшой фрагмент кода Python в виде строки, добавив все строки, использующие цикл for, и выполните его в том месте, где вы хотите, и он также будет отображаться в разных местах. Этот случай помог мне добавить данные в видео.

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)