1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| # _*_coding:UTF-8 _*_ from PIL import Image,ImageDraw,ImageFont import os import cv2 ''' Cpython基于C编写,GIL锁,目的是为了防止脏读 脏读:无效数据的读出,是指在数据库访问中,事务T1将某一值修改, 然后事务T2读取该值,此后T1因为某种原因撤销对该值的修改, 这就导致了T2所读取到的数据是无效的,值得注意的是,脏读一般是针对于update操作的。 ''' def draw(pic): # 读取在上一个程序中保存下来的截图 # 有时候PIL和CV2他不支持反斜杠,需要将反斜杠换为斜杠 # 现在读出来的图片,虽然是三通道,但不是RGB,而是BGR img = cv2.imread('G:\CV\strVideo\pic\%s'%pic) # print(img) # 把读出来的数据BGR换为RGB # 读出来的每一张图片都是三维数据,[图片长,图片宽,通道值] img = img[:,:,(2,1,0)] #切第三维,原本为BGR(0,1,2),需改为RGB(2,1,0) # print(img)
# 创建一个新的空白画布,如果最后color值不传或者为None则默认为黑色填充 blank = Image.new("RGB",[len(img[0]),len(img)],"white") # 创建一个新画布,可以在给定图像上进行绘图,需要给定要在哪个图像上进行绘图 drawOBJ = ImageDraw.Draw(blank) n = 10 # 规定要使用的字体,并且规范字号 font = ImageFont.truetype(r'C:\Windows\Fonts\Microsoft YaHei UI\msyhbd.ttc',size=n-1) # 需要遍历新图像的每个像素点 for i in range(0,len(img),n): #注意步长n for j in range(0,len(img[i]),n): text = '人智真棒' #重新替换所有元素 drawOBJ.ink = img[i][j][0]+img[i][j][1] * 256 + img[i][j][2]*256*256 drawOBJ.text([j,i],text[int(j/n) % len(text)],font=font) # 保存图片,第一个参数为路径,第二个参数为保存格式 print(i,j) # 保存图片,第一个为路径,第二个为保存格式 blank.save('new/new_'+pic,'jpeg')
# 获取到传入路径下的所有文件名 filelist = os.listdir(r'G:\CV\strVideo\pic') for file in filelist: draw(file) # print(filelist)
|