Created
March 8, 2017 00:17
-
-
Save xcsrz/8938a5d4a47976c745407fe2788c813a to your computer and use it in GitHub Desktop.
Center text on an image with Python and OpenCV. Had to come up with it myself as no one was spelling this out anywhere (or google couldn't find it)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
import numpy as np | |
import cv2 | |
from time import sleep | |
# create blank image - y, x | |
img = np.zeros((600, 1000, 3), np.uint8) | |
# setup text | |
font = cv2.FONT_HERSHEY_SIMPLEX | |
text = "Hello Joseph!!" | |
# get boundary of this text | |
textsize = cv2.getTextSize(text, font, 1, 2)[0] | |
# get coords based on boundary | |
textX = (img.shape[1] - textsize[0]) / 2 | |
textY = (img.shape[0] + textsize[1]) / 2 | |
# add text centered on image | |
cv2.putText(img, text, (textX, textY ), font, 1, (255, 255, 255), 2) | |
# display image | |
cv2.imshow('image', img) | |
# wait so you can see the image | |
sleep(25) | |
# cleanup | |
cv2.destroyAllWindows() |
Or just do
textX = (img.shape[1] - textsize[0]) // 2
textY = (img.shape[0] + textsize[1]) // 2
Thanks it works great
for future people using this: cast to int and use python_naming_conventions
The method
# get coords based on boundary
textX = (img.shape[1] - textsize[0]) / 2
textY = (img.shape[0] + textsize[1]) / 2
can lead to values with decimal placed and a decimal of a pixel is not yet defined. Suggest to round them or //2 as the guys said!
Besides that, great and simple implementation of this tool!
good
C++ users do this
int textX = (resizedSize.x - size.width) / 2;
int textY = (resizedSize.y + size.height) / 2;
https://gist.github.com/Erol444/962bf3d2bd5813d1475d03d154c9966b <- A script that adds a bit more options, like printing text at specific location on frame (topLeft, middle, bottomRight...) and text padding.
thanks! this worked.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@haiderasad does that mean you got around your type error? I haven't encountered that but my guess is you need 18-19 to round: