Python在图片中添加文字的两种方法


Posted in Python onApril 29, 2017

本文主要介绍的是利用Python在图片中添加文字的两种方法,下面分享处理供大家参考学习,下来要看看吧

一、使用OpenCV

在图片中添加文字看上去很简单,但是如果是利用OpenCV来做却很麻烦。OpenCV中并没有使用自定义字体文件的函数,这不仅意味着我们不能使用自己的字体,而且意味着他无法显示中文字符。这还是非常要命的事情。而且他显示出来的文字位置也不太好控制。比如下面的代码,他想做的仅仅是显示数字3:

代码:

#coding=utf-8
import cv2
import numpy as np
from pylab import *
%matplotlib inline
font=cv2.FONT_HERSHEY_SIMPLEX#使用默认字体
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表示粗细
imshow(img)

结果:

Python在图片中添加文字的两种方法

我么可以发现文字出现的位置并不怎么好把握,初始的坐标默认是指左下角的坐标,不怎么方便。而且显示出文字以后,我们不好掌握他实际占的位置和大小。

不过有一点方便的是,我们可以随意改变他的粗细,而不用更换字体。这一点是下面使用PIL进行绘图所不具备的优点。

二、使用PIL

同样为了生成数字3,下面是使用PIL进行的操作:

代码:

import Image,ImageFont,ImageDraw
import numpy as np
from pylab import *
%matplotlib inline
font = 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)

结果:

Python在图片中添加文字的两种方法

我们可以发现,PIL支持使用自定义的字体文件,而且能够提供字体所占位置的详细信息,我们可以精确的确定文字所占的位置,在应用中特别有用。唯一的不足就是他不能改变字体的粗细(毕竟这用的是字体模板)。

实际应用中看来还要在这两种方法中择优使用。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者使用python能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
kNN算法python实现和简单数字识别的方法
Nov 18 Python
python下setuptools的安装详解及No module named setuptools的解决方法
Jul 06 Python
Python中文件的读取和写入操作
Apr 27 Python
Python对象中__del__方法起作用的条件详解
Nov 01 Python
PySide和PyQt加载ui文件的两种方法
Feb 27 Python
Python2与Python3的区别实例总结
Apr 17 Python
python的sorted用法详解
Jun 25 Python
Python抓新型冠状病毒肺炎疫情数据并绘制全国疫情分布的代码实例
Feb 05 Python
python代码实现将列表中重复元素之间的内容全部滤除
May 22 Python
python中selenium库的基本使用详解
Jul 31 Python
python文件排序的方法总结
Sep 13 Python
Python脚本打包成可执行文件过程解析
Oct 20 Python
Python实现对字符串的加密解密方法示例
Apr 29 #Python
Python实现通过文件路径获取文件hash值的方法
Apr 29 #Python
python基于pyDes库实现des加密的方法
Apr 29 #Python
Python简单实现Base64编码和解码的方法
Apr 29 #Python
Python变量和字符串详解
Apr 29 #Python
python实现unicode转中文及转换默认编码的方法
Apr 29 #Python
Python 正则表达式实现计算器功能
Apr 29 #Python
You might like
php fsockopen解决办法 php实现多线程
2014/01/20 PHP
理解PHP中的Session及对Session有效期的控制
2016/01/08 PHP
PHP使用PDO访问oracle数据库的步骤详解
2017/09/29 PHP
php精度计算的问题解析
2019/06/21 PHP
jQuery:delegate中select()不起作用的解决方法(实例讲解)
2014/01/26 Javascript
jQuery学习笔记之 Ajax操作篇(一) - 数据加载
2014/06/23 Javascript
jQuery实现的五子棋游戏实例
2015/06/13 Javascript
javascript日期格式化方法汇总
2015/10/04 Javascript
AngularJs中route的使用方法和配置
2016/02/04 Javascript
Node.js实用代码段之获取Buffer对象字节长度
2016/03/17 Javascript
Bootstrap网格系统详解
2016/04/26 Javascript
Angular.Js的自动化测试详解
2016/12/09 Javascript
canvas时钟效果
2017/02/16 Javascript
基于Bootstrap框架实现图片切换
2017/03/10 Javascript
vue中的非父子间的通讯问题简单的实例代码
2017/07/19 Javascript
详解VUE 对element-ui中的ElTableColumn扩展
2018/03/28 Javascript
vue项目打包部署到服务器的方法示例
2018/08/27 Javascript
解决微信小程序防止无法回到主页的问题
2018/09/28 Javascript
vue限制输入框只能输入8位整数和2位小数的代码
2019/11/06 Javascript
Vue的Eslint配置文件eslintrc.js说明与规则介绍
2020/02/03 Javascript
[02:27]DOTA2英雄基础教程 莱恩
2014/01/17 DOTA
[44:40]2018DOTA2亚洲邀请赛3月30日 小组赛A组Liquid VS OG
2018/03/31 DOTA
基于Python List的赋值方法
2018/06/23 Python
pyQt4实现俄罗斯方块游戏
2018/06/26 Python
Python使用itertools模块实现排列组合功能示例
2018/07/02 Python
利用anaconda保证64位和32位的python共存
2021/03/09 Python
解决python彩色螺旋线绘制引发的问题
2019/11/23 Python
Unineed旗下时尚轻奢网站:FABHunt
2019/05/13 全球购物
C#面试题问题集
2016/04/02 面试题
会计电算化专业毕业生求职信范文
2013/12/10 职场文书
大学生毕业鉴定
2014/01/31 职场文书
矿泉水广告词
2014/03/20 职场文书
助人为乐模范事迹材料
2014/06/02 职场文书
2014年青年志愿者工作总结
2014/12/09 职场文书
2015年爱牙日活动总结
2015/03/23 职场文书
Beekeeper Studio开源数据库管理工具比Navicat更炫酷
2022/06/21 数据库