我想在图像上放一些文字。 我正在编写代码:
cv2.putText(image,"Hello World!!!", (x,y), cv2.CV_FONT_HERSHEY_SIMPLEX, 2, 255)
它给出了ERROR,说'module'对象没有属性'CV_FONT_HERSHEY_SIMPLEX'
查询
我不能使用上面的字体类型?我在互联网上搜索,但发现只有与Opencv C ++ for initFont相关的语法。
然后我想到使用putText
将字体类型作为参数传递。
但它不适合我。
有什么建议吗?
答案 0 :(得分:56)
This code uses cv2.putText to overlay text on an image. You need NumPy and OpenCV installed.
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)
答案 1 :(得分:25)
cv(1)中有CV_FONT_HERSHEY_SIMPLEX
吗?
这里有我可用于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)
答案 2 :(得分:9)
这确实是一个令人讨厌的问题。 对于python 2.x.x,您使用:
cv2.CV_FONT_HERSHEY_SIMPLEX
和Python 3.x.x:
cv2.FONT_HERSHEY_SIMPLEX
我建议使用自动完成环境(例如pyscripter或scipy)。如果您查找示例代码,请确保它们使用相同版本的Python(如果他们不确定您更改代码)。
答案 3 :(得分:6)
我有类似的问题。我建议在python中使用PIL
库,因为它绘制任何给定字体的文本,与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)
答案 4 :(得分:1)
这是带参数标签的代码
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
答案 5 :(得分:1)
对于上面的示例,解决方案如下所示:
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()
答案 6 :(得分:1)
您可以在当前的opencv版本中使用cv2.FONT_HERSHEY_SIMPLEX代替cv2.CV_FONT_HERSHEY_SIMPLEX
答案 7 :(得分:0)
我知道这是一个非常老的问题,但我认为我有解决方案 在较新的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
所以您要做的就是用相应的数字替换字体名称
cv2.putText(image,"Hello World!!!", (x,y), 0, 2, 255)
同样,我知道这是一个老问题,但将来可能会对某人有所帮助