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

我么可以發現文字出現的位置并不怎么好把握,初始的坐標默認是指左下角的坐標,不怎么方便。而且顯示出文字以后,我們不好掌握他實際占的位置和大小。
不過有一點方便的是,我們可以隨意改變他的粗細,而不用更換字體。這一點是下面使用PIL進行繪圖所不具備的優點。
二、使用PIL
同樣為了生成數字3,下面是使用PIL進行的操作:
代碼:
import Image,ImageFont,ImageDrawimport numpy as npfrom pylab import *%matplotlib inlinefont = ImageFont.truetype('3.ttf',50) #使用自定義的字體,第二個參數表示字符大小im = Image.new("RGB",(50,50)) #生成空白圖像draw = ImageDraw.Draw(im) #繪圖句柄x,y=(0,0) #初始左上角的坐標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)結果:

我們可以發現,PIL支持使用自定義的字體文件,而且能夠提供字體所占位置的詳細信息,我們可以精確的確定文字所占的位置,在應用中特別有用。唯一的不足就是他不能改變字體的粗細(畢竟這用的是字體模板)。
實際應用中看來還要在這兩種方法中擇優使用。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家學習或者使用python能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對武林網的支持。
新聞熱點
疑難解答
圖片精選