Hello 大家好,我是皮皮康。
据说8月25日是China七夕节,嗯。。。如果你是宅男是不是也不知道如何送礼物给GF?今天咱们来点实用点的工科生浪漫,用“Love”拼出一个人的头像!准备好开饭了吗?!
【餐前准备】
(1)女性高清图片一张(头部所占比例较高)
(2)python版本:我电脑上是3.7+
(3)CV2和Pillow库:安装方法同之前安装pandas和numpy
pip install opencv-pythonpip install Pillow
【程序思路】
对照片进行处理,提取其像素信息,对其原先灰度值不做改变,然后赋给排布满文字的新图片,保存输出就完事了!!!
【Step1:调用轮子】
调用库需要图像处理进行轮子支撑:
#!/usr/bin/python#-*-coding:UTF-8 -*-import cv2from PIL import Image, ImageDraw, ImageFont
【Step2:函数设计】
定义一个Redraw的函数,将今天需要的功能全部封装在函数里,函数参数为图片和填充图片的文字信息:
def Redraw(pic, draw_text):
既然需要处理图片,首先是图片的读取,因为我们要在图片上写字,所以将图片背景设置为white:
img = cv2.imread(pic)blank = Image.new("RGB", [img.shape[1], img.shape[0]], "white")drawObj = ImageDraw.Draw(blank)
【Step3:参数调试】
图片是由像素点组成,我们先自动对原先图片进行像素记录。然后间隔一定像素填充text信息,考虑到美观等因素,这里大家可以一个个尝试。最后要给出你想使用的字体的位置信息,一般在“C:\Windows\Fonts”文件夹下:
n = 10 # pixel distancem = 9 # font sizefont_path = '你使用字体的位置' # like r'C:\Windows\Fonts\ARLRDBD.TTF'font = ImageFont.truetype(font_path, size=m)
【Step4:Draw it!】
通过两个for循环(平面坐标x,y),依次定位到每个文字所在的色块(中间间隔n是因为文字比像素块大得多,不可能完全按照每个像素的位置和色彩来排布),代码如下:
for i in range(0, img.shape[0], n): for j in range(0, img.shape[1], n): drawObj.text([j, i],draw_text[int(j / n) % len(draw_text)], fill=(img[i][j][2], img[i][j][1], img[i][j][0]),font=font)
使用text( )方法填入带色彩的文字,几个参数的意义如下:
[j, i] -- location
draw_text[int(j / n) % len(draw_text)] --当前写入的那个字
fill=(img[i][j][2], img[i][j][1], img[i][j][0]) -- 代表源图片对应位置的颜色(三个分别代表RBG颜色值)
font –-填充字体信息
最后输出保存就行了:
blank.save('img_' + pic)
测试两组效果如下:
【源码】
#!/usr/bin/python#-*-coding:UTF-8 -*-import cv2from PIL import Image, ImageDraw, ImageFont def Redraw(pic, draw_text): img = cv2.imread(pic) blank = Image.new("RGB", [img.shape[1], img.shape[0]], "white") drawObj = ImageDraw.Draw(blank) n = 10 m = 9 font_path=r'C:\Windows\Fonts\ARLRDBD.TTF' font = ImageFont.truetype(font_path, size=m) for i in range(0, img.shape[0], n): for j in range(0, img.shape[1], n): drawObj.text([j, i],draw_text[int(j / n) % len(draw_text)], fill=(img[i][j][2], img[i][j][1], img[i][j][0]),font=font) blank.save('img_' + pic) Redraw('test2.jpg', "LOVE")
【来日方长】
今天主要是讲了用python的图片处理方面的库来做一些基础的图像处理工作,其实python图像处理这一块能做的东西很多,最简单的图像识别等。
来日方长,多多指教~
Best Regards,
皮皮康
【本文纯属原创,转载请注明出处】