Day1(图像添加形状与文字,图像的转化)
添加形状:
使用内置函数,详情查看链接:
添加链接描述
插入矩形的rectangle()非常重要,在后续的目标检测中我们通常会使用矩形将目标框出来。
添加文字:
当添加英文或数字时,可直接使用putText(),注意fontFace参数中的类型,可参考上述文档:
当插入中文时,就有些麻烦。因为putText函数并不能支持中文,所以我们需要先将opencv图片转化成PIL图片(因为opencv的图片采用BGR格式而PIL采用RGB,所以要先将BGR转化成RGB):
img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) #将opencv图片转化成PIL图片
在用PIL库中的函数进行文字的添加,再将其转化回opencv图片:
img = cv2.cvtColor(numpy.asarray(img), cv2.COLOR_RGB2BGR) #将PIL图片转化成opencv图片
完整代码如下:
import cv2
import numpy
from PIL import Image, ImageDraw, ImageFont
img = cv2.imread('C:\\Users\\1\\PycharmProjects\\text\\1.jpeg')
img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) #将opencv图片转化成PIL图片
draw = ImageDraw.Draw(img)
fontText = ImageFont.truetype("C:\\Users\\1\\PycharmProjects\\text\\20090701\\arialuni.ttf", 100, encoding="utf-8")
draw.text((100, 100), "水晶猎龙", (255, 255, 255), font=fontText)
img = cv2.cvtColor(numpy.asarray(img), cv2.COLOR_RGB2BGR) #将PIL图片转化成opencv图片
cv2.namedWindow('image', 0)
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
效果:
注意几个函数:
- cv2.cvtColor(image, 参数)
通过参数的不同可将image转化成不同的格式
2.Image.fromarray(obj)
实现数组到图像的转化
在例子中实现的是RGB格式的opencv图像转化为PIL图像,猜想:所有图像的本质应该都是narry,但因为读取方式不同,同一个narry可能会被读取成不同格式的图像,就如这里使用PIL的函数读取了opencv的图像,所以结果应该是PIL格式的图像(若不将opencv的BGR转化为RGB,图像色彩将会出现失真)
3.imageDraw.Draw(img)
iamgeDraw模块中的Draw函数,在图像上创建一个绘图对象
4.imageFont.truetype(file, size)
从指定文件中加载字体,并设定大小
5.draw.text(位置, text, color, font=字体)
就所指定位置而言感觉和常识有所出入,一般随便试一试找到合适的
图像转换
主要通过cv2.cvtColor函数进行,上文中已经介绍过。
转换后图像的储存:cv.imwrite(path,img)
可按指定路径path储存img图像,代码与效果如下:
import cv2
import numpy as np
img = cv2.imread('C:\\Users\\1\\PycharmProjects\\text\\1.jpeg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imwrite('img.jpg', img)
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
生成的图片文件会储存在程序目录下