Python在圖片中添加文字的兩種方法
本文主要介紹的是利用Python在圖片中添加文字的兩種方法,下面分享處理供大家參考學(xué)習(xí),下來要看看吧
一、使用OpenCV
在圖片中添加文字看上去很簡單,但是如果是利用OpenCV來做卻很麻煩。OpenCV中并沒有使用自定義字體文件的函數(shù),這不僅意味著我們不能使用自己的字體,而且意味著他無法顯示中文字符。這還是非常要命的事情。而且他顯示出來的文字位置也不太好控制。比如下面的代碼,他想做的僅僅是顯示數(shù)字3:
代碼:
#coding=utf-8 import cv2 import numpy as np from pylab import * %matplotlib inline font=cv2.FONT_HERSHEY_SIMPLEX#使用默認(rèn)字體 im=np.zeros((50,50,3),np.uint8)#新建圖像,注意一定要是uint8 img=cv2.putText(im,'3',(0,40),font,1.2,(255,255,255),2)#添加文字,1.2表示字體大小,(0,40)是初始的位置,(255,255,255)表示顏色,2表示粗細(xì) imshow(img)
結(jié)果:

我么可以發(fā)現(xiàn)文字出現(xiàn)的位置并不怎么好把握,初始的坐標(biāo)默認(rèn)是指左下角的坐標(biāo),不怎么方便。而且顯示出文字以后,我們不好掌握他實(shí)際占的位置和大小。
不過有一點(diǎn)方便的是,我們可以隨意改變他的粗細(xì),而不用更換字體。這一點(diǎn)是下面使用PIL進(jìn)行繪圖所不具備的優(yōu)點(diǎn)。
二、使用PIL
同樣為了生成數(shù)字3,下面是使用PIL進(jìn)行的操作:
代碼:
import Image,ImageFont,ImageDraw
import numpy as np
from pylab import *
%matplotlib inline
font = ImageFont.truetype('3.ttf',50) #使用自定義的字體,第二個(gè)參數(shù)表示字符大小
im = Image.new("RGB",(50,50)) #生成空白圖像
draw = ImageDraw.Draw(im) #繪圖句柄
x,y=(0,0) #初始左上角的坐標(biāo)
draw.text((x,y), '3', font=font) #繪圖
offsetx,offsety=font.getoffset('3') #獲得文字的offset位置
width,height=font.getsize('3') #獲得文件的大小
im=np.array(im)
cv2.rectangle(im,(offsetx+x,offsety+y),(offsetx+x+width,offsety+y+height),(255,255,255),1)#繪出矩形框
imshow(im)
結(jié)果:

我們可以發(fā)現(xiàn),PIL支持使用自定義的字體文件,而且能夠提供字體所占位置的詳細(xì)信息,我們可以精確的確定文字所占的位置,在應(yīng)用中特別有用。唯一的不足就是他不能改變字體的粗細(xì)(畢竟這用的是字體模板)。
實(shí)際應(yīng)用中看來還要在這兩種方法中擇優(yōu)使用。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家學(xué)習(xí)或者使用python能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
基于Python實(shí)現(xiàn)四維圖像繪制系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了如何基于Python語言實(shí)現(xiàn)一個(gè)簡單的四維圖像繪制系統(tǒng),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-09-09
Python識別驗(yàn)證碼的實(shí)現(xiàn)示例
這篇文章主要介紹了Python識別驗(yàn)證碼的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
Python機(jī)器學(xué)習(xí)庫之Scikit-learn基本用法詳解
Scikit-learn?是?Python?中最著名的機(jī)器學(xué)習(xí)庫之一,它提供了大量實(shí)用的機(jī)器學(xué)習(xí)算法以及相關(guān)的工具,可以方便我們進(jìn)行數(shù)據(jù)挖掘和數(shù)據(jù)分析,在這篇文章中,我們將介紹?Scikit-learn?的基本使用,包括如何導(dǎo)入數(shù)據(jù)、預(yù)處理數(shù)據(jù)、選擇和訓(xùn)練模型,以及評估模型的性能2023-07-07
Python實(shí)現(xiàn)的微信紅包提醒功能示例
這篇文章主要介紹了Python實(shí)現(xiàn)的微信紅包提醒功能,結(jié)合實(shí)例形式分析了Python使用微信模塊itchat實(shí)現(xiàn)微信紅包提醒操作的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-08-08
python ftfy庫處理金融方面文件編碼錯誤實(shí)例詳解
這篇文章主要為大家介紹了使用python ftfy庫處理金融方面文件編碼錯誤實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01
使用Selenium在Python中實(shí)現(xiàn)錄屏功能
Selenium 是一個(gè)強(qiáng)大的用于自動化測試的工具,但你知道它也可以用來錄制瀏覽器操作的視頻嗎?本文將介紹如何使用 Selenium 在 Python 中實(shí)現(xiàn)錄屏功能,以便記錄和分享你的網(wǎng)頁操作過程,需要的朋友可以參考下2023-11-11

