Подтвердить что ты не робот

Как написать текст на изображении в окнах с помощью 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, чтобы передать тип шрифта в качестве параметра. Но это не работает для меня.

Любые предложения?

4b9b3361

Ответ 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()