I want to put some text on an Image. I am writing the code as:
cv2.putText(image,"Hello World!!!", (x,y), cv2.CV_FONT_HERSHEY_SIMPLEX, 2, 255) It gives ERROR, saying 'module' object has no attribute 'CV_FONT_HERSHEY_SIMPLEX'
Query Can't I use the font type as above? I searched in internet, but found only the syntax related to to Opencv C++ for initFont. Then I thought of using putText to pass the font type as parameter. But it is not working for me.
Any suggestions?
9 Answers
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) thickness = 1 lineType = 2 cv2.putText(img,'Hello World!', bottomLeftCornerOfText, font, fontScale, fontColor, thickness, lineType) #Display the image cv2.imshow("img",img) #Save image cv2.imwrite("out.jpg", img) cv2.waitKey(0) 2Was CV_FONT_HERSHEY_SIMPLEX in cv(1)? Here's all I have available for 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 Dropping the 'CV_' seems to work for me.
cv2.putText(image,"Hello World!!!", (x,y), cv2.FONT_HERSHEY_SIMPLEX, 2, 255) 3I had a similar problem. I would suggest using the PIL library in python as it draws the text in any given font, compared to limited fonts in OpenCV. With PIL you can choose any font installed on your system.
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
![]()
This is indeed a bit of an annoying problem. For python 2.x.x you use:
cv2.CV_FONT_HERSHEY_SIMPLEX and for Python 3.x.x:
cv2.FONT_HERSHEY_SIMPLEX I recommend using a autocomplete environment(pyscripter or scipy for example). If you lookup example code, make sure they use the same version of Python(if they don't make sure you change the code).
I know this is a really old question but i think i have a solution In the newer versions of openCV fonts are repesented by a number like this
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 so all you have to do is replace the font name with the corresponding number
cv2.putText(image,"Hello World!!!", (x,y), 0, 2, 255) again i know its an old question but it may help someone in the future
Here's the code with parameter labels
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) For font name please see another answer in this thread.
Excerpt from answer by @Roeffus
1This is indeed a bit of an annoying problem. For python 2.x.x you use:
cv2.CV_FONT_HERSHEY_SIMPLEX and for Python 3.x.x:
cv2.FONT_HERSHEY_SIMPLEX
You can use cv2.FONT_HERSHEY_SIMPLEX instead of cv2.CV_FONT_HERSHEY_SIMPLEX in current opencv version
I use python 3 and this code below works fine for me.
import cv2 image = cv2.imread('lena.jpg',1) font = cv2.FONT_HERSHEY_COMPLEX cv2.putText(image,'Hello There',(0,100),font,2,(255,255,255),3) #text,coordinate,font,size of text,color,thickness of font cv2.imshow('image',image) cv2.waitKey(0) cv2.destroyAllWindows() for the example above the solution would look like this:
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()