用python实现一些工具不一定是技术上最好的选择,但可能是最简洁、最面向大众的。介绍几个图像处理的好案例,附上代码,让大家尽量用得上。1、生成手绘图片现在很多软件都可以把照片转成手绘形式,python也可以实现,而且定制化程度更高,可以批量转换。这里用到了pillow库,它是一个非常强大专业的Python图像处理库。\Picture\\Lujiazui.jpg"#生成的手绘图路径可自定义handdrawn_image_path="E:\\Picture\\Lujiazui-hand-painted.jpg"#加载原图并转换图片intoanarraydataa=np.asarray(Image.open(original_image_path).convert('L')).astype('float')depth=10.#获取图像灰度的梯度值grad=np.gradient(a)#得到水平和垂直图像的梯度值grad_x,grad_y=gradgrad_x=grad_x*depth/100.grad_y=grad_y*depth/100.A=np.sqrt(grad_x**2+grad_y**2+1.)uni_x=grad_x/Auni_y=grad_y/Auni_z=1./A#光源俯视角转换成弧度值vec_el=np.pi/2.2#光源方位角转换成弧度值vec_az=np.pi/4.#光源对x轴的影响dx=np.cos(vec_el)*np.cos(vec_az)dy=np.cos(vec_el)*np.sin(vec_az)dz=np.sin(vec_el)#归一化光源,将渐变转化为灰度b=255*(dx*uni_x+dy*uni_y+dz*uni_z)#避免数据越界,裁剪t他生成的灰度值到0-255以内b=b.clip(0,255)#Imagereconstructionim=Image.fromarray(b.astype('uint8'))print('Complete')im.save(handdrawn_image_path)这里可以制作一个用于批处理的手绘脚本,试试吧。2.生成证件照。这里用到了pillow和removebg,分别用来修改照片尺寸和裁剪图片。这里removebg使用了AI技术,抠图的边缘很柔和,效果还是不错的。代码:#encoding=utf-8fromPILimportImagefromremovebgimportRemoveBg#removebg涉及到api_key,需要去其官网申请api_key='PysKLJueeeoyK9NbJXXXXXXXXX'defchange_bgcolor(file_in,file_out,api_key,color):'''#mustbeinpngformat'''p,s=file_in.split(".")rmbg=RemoveBg(api_key,'error.log')rmbg.remove_background_from_img_file(file_in)file_no_bg="{}.{}_no_bg.{}".format(p,s,s)no_bg_image=Image.open(file_no_bg)x,y=no_bg_image.sizenew_image=Image.new('RGBA',no_bg_image.size,color=color)new_image.paste(no_bg_image,(0,0,x,y),no_bg_image)new_image.save(file_out)#修改照片大小defchange_size(file_in,file_out,width,height):image=Image.open(file_in)resized_image=image.resize((width,height),Image.ANTIALIAS)resized_image.save(file_out)if__name__=="__main__":file_in='E:\\girl.png'file_out='E:\\girl_cutout.png'#大小可以根据需要修改#change_size(file_in,file_out,width,height)#改变背景颜色color=(0,125,255)change_bgcolor(file_in,file_out,api_key,color)3.生成艺术二维码二维码生成工具有很多,python也有一个二维码生成库——myqr,可以添加二维码图片上背景,看起来很炫,效果如下使用pip安装myqr,很简单库可以在命令行运行,只需要传递url链接,图片地址等参数,和对应的二维码,即可生成二维码图片默认保存在当前目录下。命令行输入格式:myqr网址链接如:myqrhttps://zhuanlan.zhihu.com/pydatalysis然后按回车键执行,会生成链接对应的二维码。如何合并图片?很简单,传入图片地址参数'-p'比如我在d盘有一张海绵宝宝的图片,地址是:d:\hmbb.jpg,然后传入参数'-pd:\hmbb.jpg'在命令行输入:myqrhttps://zhuanlan.zhihu.com/pydatalysis-pd:\hmbb.jpg-c执行生成如上图海绵宝宝主题二维码。4、生成词云图词云图一般用于突出文本关键词,生成视觉焦点。善用词云会让数据更有说服力。Python还有一个制作词云的库——wordcloud,可以自定义颜色和形状。比如我用小丑的豆瓣评论做了一个词云图。要制作词云图,首先需要采集文本,然后对文本进行分词,最后生成词云。这里不详细分析前两步,只分析词云代码:defwordCloudImage(wordlist,width,height,bgcolor,savepath):#可以打开自己喜欢的词云显示背景图#cloud_mask=np.array(Image.open('nezha.png'))#定义词云的一些属性wc=WordCloud(width=width,#mapwidth900height=height,#mapheight3000background_color=bgcolor,#背景图片分割颜色为白色“黑色”#mask=cloud_mask,#backgroundpatternmax_words=300,#显示最大字数font_path='./fonts/simhei.ttf',#displayChinesecollocations=False,#min_font_size=5,#minimumsize#max_font_size=100,#maximumSize)#wordfile是分词后的词表x=wc.generate(wordlist)#生成词云图image=x.to_image()#显示词云图image.show()#savepath是图片存储地址,保存词云图片wc.to_file(savepath)5.生成微信九方格图片。一时间,九格格图片在朋友圈火了一把。一张图片被分成九张,看起来很有艺术感。这个用很多软件都可以做到,当然python也可以做到,代码不到50行。代码:#朋友圈九宫格图片制作#encoding=utf-8fromPILimportImageimportsys#首先将输入图像填充成正方形deffill_image(image):width,height=image.size#选择原图长宽中较大的值作为半径新图片的九宫格new_image_length=widthifwidth>heightelseheight#制作新图片[白色背景]new_image=Image.new(image.mode,(new_image_length,new_image_length),color='white')#将原图粘贴到新图片上图片,位置居中ifwidth>height:new_image.paste(image,(0,int((new_image_length-height)/2)))else:new_image.paste(image,(int((new_image_length-width)/2),0))returnnew_image#将图片裁剪成九宫格defcut_image(image):width,height=image.size#一行放3张图片item_width=int(width/3)box_list=[]foriinrange(0,3):forjinrange(0,3):box=(j*item_width,i*item_width,(j+1)*item_width,(i+1)*item_width)box_list.append(box)image_list=[图像.crop(box)forboxinbox_list]returnimage_list#saveimagedefsave_images(image_list):index=1forimageinimage_list:image.save('e:\\image\\'+str(index)+'.png','PNG')index+=1if__name__=='__main__':file_path="e:\\image\\龙猫.jpg"image=Image.open(file_path)#image.show()image=fill_image(image)image_list=cut_image(image)print(len(image_list))save_images(image_list)python还可以做很多有趣的图像处理,可以玩玩!
