如何使用python opencv2在Windows中的图像上写文本

Cha*_*ure 50 python windows opencv

我想在图像上放一些文字.我正在编写代码:

cv2.putText(image,"Hello World!!!", (x,y), cv2.CV_FONT_HERSHEY_SIMPLEX, 2, 255)
Run Code Online (Sandbox Code Playgroud)

它给出了ERROR,说'module'对象没有属性'CV_FONT_HERSHEY_SIMPLEX'

查询 我不能使用上面的字体类型?我在互联网上搜索,但发现只有与Opencv C++ for initFont相关的语法.然后我想到使用putText将字体类型作为参数传递.但这对我不起作用.

有什么建议?

Vin*_*ula 76

此代码使用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)
Run Code Online (Sandbox Code Playgroud)

  • 知道书面文本的大小可能很有用:`text_width,text_height = cv2.getTextSize(text_description,font,fontScale,lineType)[0]` (9认同)
  • 这里`lineType` 应该是`lineThickness`,因为那是参数列表。请参阅:https://docs.opencv.org/2.4/modules/core/doc/drawing_functions.html#puttext (3认同)

And*_*hal 29

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
Run Code Online (Sandbox Code Playgroud)

放弃'CV_'似乎对我有用.

cv2.putText(image,"Hello World!!!", (x,y), cv2.FONT_HERSHEY_SIMPLEX, 2, 255)
Run Code Online (Sandbox Code Playgroud)

  • 你是如何获得可用字体列表的? (2认同)
  • @ CraigS.Anderson我的解决方法通常是在Python提示符下,如下所示:`import cv2; [如果在x.startswith('FONT_')中,则在dir(cv2)中将x用于x]] (2认同)

小智 10

这确实是一个恼人的问题.对于python 2.xx,您使用:

cv2.CV_FONT_HERSHEY_SIMPLEX
Run Code Online (Sandbox Code Playgroud)

并为Python 3.xx:

cv2.FONT_HERSHEY_SIMPLEX
Run Code Online (Sandbox Code Playgroud)

我建议使用自动完成环境(例如pyscripter或scipy).如果您查找示例代码,请确保它们使用相同版本的Python(如果它们不确保您更改代码).


ger*_*vey 9

我知道这是一个非常老的问题,但我想我有一个解决方案 在较新版本的 openCV 字体中,用这样的数字表示

    FONT_HERSHEY_SIMPLEX = 0,
    FONT_HERSHEY_PLAIN = 1,
    FONT_HERSHEY_DUPLEX = 2,
    FONT_HERSHEY_COMPLEX = 3,
    FONT_HERSHEY_TRIPLEX = 4,
    FONT_HERSHEY_COMPLEX_SMALL = 5,
    FONT_HERSHEY_SCRIPT_SIMPLEX = 6,
    FONT_HERSHEY_SCRIPT_COMPLEX = 7,
    FONT_ITALIC = 16
Run Code Online (Sandbox Code Playgroud)

所以你所要做的就是用相应的数字替换字体名称

cv2.putText(image,"Hello World!!!", (x,y), 0, 2, 255)
Run Code Online (Sandbox Code Playgroud)

我再次知道这是一个老问题,但它可能会在未来帮助某人


Dol*_*hay 5

我有一个类似的问题。PIL与OpenCV中的有限字体相比,我建议在python中使用该库,因为它以任何给定的字体绘制文本。使用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)
Run Code Online (Sandbox Code Playgroud)

result.png

  • 尽管您的解决方案显然有效,但我认为它没有回答指定它使用 Opencv 的问题。 (3认同)