Как написать текст на изображении в окнах с помощью python opencv2
Я хочу поместить некоторый текст в изображение.
Я пишу код как:
cv2.putText(image,"Hello World!!!", (x,y), cv2.CV_FONT_HERSHEY_SIMPLEX, 2, 255)
Он дает ERROR, говоря, что объект 'module' не имеет атрибута 'CV_FONT_HERSHEY_SIMPLEX'
Query
Не могу ли я использовать шрифт, как указано выше? Я искал в Интернете, но нашел только синтаксис, связанный с Opencv С++ для initFont.
Затем я подумал об использовании putText
, чтобы передать тип шрифта в качестве параметра.
Но это не работает для меня.
Любые предложения?
Ответы
Ответ 1
Этот код использует cv2.putText для наложения текста на изображение. Вам нужны NumPy и OpenCV.
import numpy as np
import cv2
# Create a black image
img = np.zeros((512,512,3), np.uint8)
# Write some Text
font = cv2.FONT_HERSHEY_SIMPLEX
bottomLeftCornerOfText = (10,500)
fontScale = 1
fontColor = (255,255,255)
lineType = 2
cv2.putText(img,'Hello World!',
bottomLeftCornerOfText,
font,
fontScale,
fontColor,
lineType)
#Display the image
cv2.imshow("img",img)
#Save image
cv2.imwrite("out.jpg", img)
cv2.waitKey(0)
Ответ 2
Был ли CV_FONT_HERSHEY_SIMPLEX
в cv (1)?
Здесь все, что у меня есть для cv2 "FONT":
FONT_HERSHEY_COMPLEX
FONT_HERSHEY_COMPLEX_SMALL
FONT_HERSHEY_DUPLEX
FONT_HERSHEY_PLAIN
FONT_HERSHEY_SCRIPT_COMPLEX
FONT_HERSHEY_SCRIPT_SIMPLEX
FONT_HERSHEY_SIMPLEX
FONT_HERSHEY_TRIPLEX
FONT_ITALIC
Сбрасывание "CV_", похоже, сработает для меня.
cv2.putText(image,"Hello World!!!", (x,y), cv2.FONT_HERSHEY_SIMPLEX, 2, 255)
Ответ 3
Это действительно немного неприятная проблема.
Для python 2.x.x вы используете:
cv2.CV_FONT_HERSHEY_SIMPLEX
и для Python 3.x.x:
cv2.FONT_HERSHEY_SIMPLEX
Я рекомендую использовать среду автозаполнения (например, pyscripter или scipy). Если вы посмотрите пример кода, убедитесь, что они используют одну и ту же версию Python (если они не уверены, что вы изменили код).
Ответ 4
У меня была похожая проблема. Я бы предложил использовать библиотеку PIL
в python, поскольку она рисует текст любым шрифтом по сравнению с ограниченными шрифтами в OpenCV. С PIL вы можете выбрать любой шрифт, установленный в вашей системе.
from PIL import ImageFont, ImageDraw, Image
import numpy as np
import cv2
image = cv2.imread("lena.png")
# Convert to PIL Image
cv2_im_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
pil_im = Image.fromarray(cv2_im_rgb)
draw = ImageDraw.Draw(pil_im)
# Choose a font
font = ImageFont.truetype("Roboto-Regular.ttf", 50)
# Draw the text
draw.text((0, 0), "Your Text Here", font=font)
# Save the image
cv2_im_processed = cv2.cvtColor(np.array(pil_im), cv2.COLOR_RGB2BGR)
cv2.imwrite("result.png", cv2_im_processed)
result.png
![w1IkY.png]()
Ответ 5
Здесь код с метками параметров
def draw_text(self, frame, text, x, y, color=BGR_COMMON['green'], thickness=1.3, size=0.3,):
if x is not None and y is not None:
cv2.putText(
frame, text, (int(x), int(y)), cv2.FONT_HERSHEY_SIMPLEX, size, color, thickness)
Для имени шрифта см. другой ответ в этом потоке.
Выдержка из ответа @Roeffus
Это действительно немного неприятная проблема. Для python 2.x.x вы используете:
cv2.CV_FONT_HERSHEY_SIMPLEX и для Python 3.x.x:
cv2.FONT_HERSHEY_SIMPLEX
Подробнее см. http://www.programcreek.com/python/example/83399/cv2.putText
Ответ 6
для приведенного выше примера решение будет выглядеть так:
import PILasOPENCV as Image
import PILasOPENCV as ImageDraw
import PILasOPENCV as ImageFont
# from PIL import ImageFont, ImageDraw, Image
import numpy as np
import cv2
image = cv2.imread("lena.jpg")
# Convert to PIL Image
cv2_im_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
pil_im = Image.fromarray(cv2_im_rgb)
draw = ImageDraw.Draw(pil_im)
# Choose a font
font = ImageFont.truetype("Roboto-Regular.ttf", 40)
# Draw the text
draw.text((0, 0), "Your Text Here", font=font)
# Save the image
cv2_im_processed = pil_im.getim()
cv2.imshow("cv2_im_processed", cv2_im_processed)
cv2.waitKey()