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)