本文主要介绍的是利用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)

结果:

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

不过有一点方便的是,我们可以随意改变他的粗细,而不用更换字体。这一点是下面使用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)

结果:

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

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

总结

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

python文字教程-Python在图片中添加文字的两种方法相关推荐

  1. Python计算程序运行时间秒级/毫秒级的两种方法datetime和time

    Python计算程序运行时间秒级/毫秒级的两种方法datetime和time 简单粗暴,先上代码: import datetime import time# 方法一:datetime.datetime ...

  2. 计算机增加用户win7,win7系统添加用户组的两种方法(图文)

    本教程和大家分享win7纯净版系统添加用户组的两种方法,Win7用户组管理可以用来查看和管理电脑的本地用户和组,比如删除用户,更改用户权限等.可是在win7系统中如何添加用户组呢?其实添加用户组的方法 ...

  3. java在文件的后面添加_java 在file的尾部添加数据的两种方法总结

    java 在file的尾部添加数据的两种方法总结 问题描述: 在文件的末尾追加内容 方法1:利用RandomAccessFile类 1.将randomAccessFile模式设置为rw 2将rando ...

  4. html+input改变图标,JS Input里添加小图标的两种方法

    我们在做网页的时候,经常需要在input里面添加小图标,那么这里就介绍比较常见的两种方法. 将小图标当做input的背景来插入,直接上代码吧: Box{ height: 50px; backgroun ...

  5. java 文件尾部_java 在file的尾部添加数据的两种方法总结

    java 在file的尾部添加数据的两种方法总结 问题描述: 在文件的末尾追加内容 方法1:利用RandomAccessFile类 1.将randomAccessFile模式设置为rw 2将rando ...

  6. html密码框怎么添加小图标,JS Input里添加小图标的两种方法

    我们在做网页的时候,经常需要在input里面添加小图标,那么这里就介绍比较常见的两种方法. 方法一 将小图标当做input的背景来插入,直接上代码吧: *{ margin: 0; padding: 0 ...

  7. input 单击 图标_JS Input里添加小图标的两种方法

    我们在做网页的时候,经常需要在input里面添加小图标,那么这里就介绍比较常见的两种方法. 方法一 将小图标当做input的背景来插入,直接上代码吧: *{ margin: 0; padding: 0 ...

  8. js循环添加事件的两种方法

    js循环添加事件的两种方法 选择下拉列表中的一个li将文本传到框中 问题:写此二级菜单时用到的方法不好,对此进行优化 原始js代码: <script>// 思路:1.点击下拉框a时,ul中 ...

  9. 【vmware虚拟机上网教程】虚拟机如何上网?两种方法简单易学(安卓Android x86虚拟机演示)

    [vmware虚拟机上网教程]虚拟机如何上网?两种方法简单易学(安卓Android x86虚拟机演示) 启动安卓虚拟机,点击打开虚拟机,然后找到虚拟机的文件. 虚拟机列表中有一个开启此虚拟机的按钮.点 ...

  10. python字符串成熟编码_python字符串转公式两种方法获取网页编码python版

    在web开发的时候我们经常会遇到网页抓取和分析,各种语言都可以完成这个功能.我喜欢用python实现,因为python提供了很多成熟的模块,可以很方便的实现网页抓取. 但是在抓取过程中会遇到编码的问题 ...

最新文章

  1. VS2008中的“解决方案配置”和“解决方案平台”不见了(Release和Debug)的解决方法...
  2. Hadoop1.x之hdfs集群搭建
  3. bzoj 2251: [2010Beijing Wc]外星联络
  4. java inflaterinputstream_java.util.zip.InflaterInputStream.available()方法示例
  5. 2020云栖大会奖品大盘点(持续更新中)
  6. LeTax如何多行注释
  7. [leetcode] 题型整理之图论
  8. 让对话框不显示边框_微信消息“无边框”模式搭配这款壁纸,简直绝了
  9. 手游服务器验证,手游登录流程
  10. 提升Python程序性能的7个习惯
  11. python的N个小功能(更新文件)
  12. 通过AO连接多个EO并进行使用
  13. Linux查找树莓派ip地址,让树莓派“说”出自己的IP地址
  14. Android杂谈--ListView之ArrayAdapter的使用
  15. 物资申请php,危废企业申请经营许可证需满足的条件及申请程序
  16. linux 系统命令总结之ubuntu 系列命令 持续更新中~
  17. 数据结构 关键路径的个人理解
  18. CentOS安装jdk
  19. Reportlab 表格样式问题
  20. uboot_v2016 版本中fw_printenv的编译问题

热门文章

  1. ThoughtWorks微服务架构交流心得
  2. IDEA 打可执行jar包(maven项目)
  3. 机器学习7—AdaBoost学习笔记
  4. 微信小程序一些常见的坑
  5. 聊聊JS与设计模式之(工厂Factory)篇------(麦当劳的故事)
  6. 红绿灯问题(位运算)
  7. 一般关于大宗商品的供需关系相关的数据网址有哪些?
  8. [Xcode 实际操作]四、常用控件-(15)MKMapView加载简单视图
  9. thymeleaf模板的使用(转)
  10. HTML5 浏览器接收的常用 content-type