Python就像pbddn的口袋,几乎什么都能做。 适合外行小白们摸索着学习,可以大大提高他们对编程的兴趣。
虽然用python实现的某些工具在技术上未必是最佳的,但可能是最简洁、最适合大众的。
介绍几个不错的图像处理案例,附上代码,尽量让大家拿来使用。
1、生成手绘图片
目前,许多软件可以将照片转换为手绘格式。 python也可以实现。 另外,定制性强,可以批量转换。
在这里使用pillow库。 这是一个非常强大和专业的Python图像处理库
原图:
生成手绘后:
代码:
# #-* -编码: utf-8-* –
自由端口图像
importnumpyasnp
# #原始图像路径
original_image_path=’E:\\图片\\陆家嘴. jpg ‘
# #可以自定义生成的手绘图像的路径
handdrawn_image_path=’E:\\图片\\陆家嘴-手绘. jpg ‘
加载# # #原画,将图像转换为排列数据
a=NP.AS阵列(图像打开(原始图像路径) .转换(‘ l ‘ ).AS类型) ‘浮点’ ) )。
深度=10。
取# # #图像的灰度梯度值
是grad=NP.gradient(a )。
取# # #横纵图像的梯度值
grad_x,grad_y=grad
grad _ x=grad _ x *深度/100。
grad _ y=grad _ y *深度/100。
a=NP.sqrt(grad_x**2grad_y**21.) ) ) ) ) ) ) )到) ) ) ) ) ) ) ) )。
uni _ x=格雷德_ x/a
uni _ y=等级y/a
uni_z=1./A
将# # #光源的平面角度转换为弧度值
vec _ El=美国航空公司/2.2
将# # #光源的方位角转换为弧度
VEC _ AZ=美国航空公司。
# #光源对x轴的影响
dx=美国国家航空运输委员会(vec_az )美国航空运输委员会
dy=美国全国石油公司(vec_az )美国石油公司(vec_az )
dz=美国国家安全委员会(VEC _ El ) )
将# # #光源标准化,将坡度转换为灰度
b=255 * (dx * uni _ xdy * uni _ ydz * uni _ z ) )
避免# # # #数据的越境,将生成的灰度值修整为0-255
b=b.clip (0,255 ) ) ) ) )。
# #图像重构
im=来自图像阵列(b.as类型(‘ uint8’ ) )
print (完成) ) ) )。
im.save (手绘图图像路径) )。
在这里可以制作批量处理的手绘脚本,请大家试一下。
2、生成证件照
这里使用pillow和removebg分别用于调整照片的大小和抠照片。
在这里,removebg使用AI技术,抠边很柔软,效果很好。
代码:
# #编码=utf-8
自由端口图像
fromremovebgimportRemoveBg
#removebg与api_key有关,需要向其官方网站申请
API _ key=’ pyskljueeoyk9nbj xxxxxxxxxx ‘
ef change _ bgcolor (文件输入、文件输出、API _密钥、颜色) :
””
# #必须为png格式
””
p,s=文件输入.分割(‘.’ )
rmbg=移除BG (API _ key,’错误. log ‘ ) )。
rmbg .移除_背景_从_ 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.size
new_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)
# 修改照片尺寸
def change_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,非常简单。
该库可以在命令行中运行,你只需要传递网址链接、图片地址等参数,就可以生成相应的二维码,二维码图片默认保存在当前目录下面。
命令行输入格式:
myqr 网址链接
比如:
myqr https://zhuanlan.zhihu.com/pydatalysis
再按enter键执行,就能生成对应链接的二维码了。
怎么融合图片呢?很简单,传入图片地址参数’-p’
比如说我d盘有一张海绵宝宝的图片,地址是:d:\hmbb.jpg即传入参数’-pd:\hmbb.jpg’在命令行键入:
myqr https://zhuanlan.zhihu.com/pydatalysis -p d:\hmbb.jpg -c
执行就能生成上图的海绵宝宝主题二维码了。
4、生成词云图
词云图一般用来凸显文本关键词,产生视觉上的焦点,利用好词云会让数据更加有说服力。
python也有专门制作词云的库-wordcloud,能自定义颜色和形状。
比如我用小丑的豆瓣评论做成一张词云图。
作词云图,首先要对收集文本,然后对文本做分词处理,最后生成词云。
这里不对前两步做详细解析,只给出词云代码:
def wordCloudImage(wordlist,width,height,bgcolor,savepath):
# 可以打开你喜欢的词云展现背景图
# cloud_mask = np.array(Image.open(‘nezha.png’))
# 定义词云的一些属性
wc = WordCloud(
width=width, # 图幅宽度 900
height=height, # 图幅高度 3000
background_color=bgcolor, # 背景图分割颜色为白色 “black”
# mask=cloud_mask, # 背景图样
max_words=300, # 显示最大词数
font_path=’./fonts/simhei.ttf’, # 显示中文
collocations=False,
# min_font_size=5, # 最小尺寸
# max_font_size=100, # 最大尺寸
)
# wordfile是分词后的词汇列表
x = wc.generate(wordlist)
# 生成词云图片
image = x.to_image()
# 展示词云图片
image.show()
# savepath是图片保存地址,保存词云图片
wc.to_file(savepath)
5、生成微信九宫格图片
有段时间朋友圈比较流行九宫格图片,就是一张图分割成九张图,看着似乎很文艺。
这个可以用很多软件来做,python当然也能实现,只需不到50行代码。
代码:
# 朋友圈九宫格图片制作
# encoding=utf-8
from PIL import Image
import sys
# 先将input image 填充为正方形
def fill_image(image):
width, height = image.size
# 选取原图片长、宽中较大值作为新图片的九宫格半径
new_image_length = width if width > height else height
# 生产新图片【白底】
new_image = Image.new(image.mode, (new_image_length, new_image_length), color=’white’)
# 将原图粘贴在新图上,位置为居中
if width > height:
new_image.paste(image, (0, int((new_image_length – height) / 2)))
else:
new_image.paste(image, (int((new_image_length – width) / 2), 0))
return new_image
# 将图片切割成九宫格
def cut_image(image):
width, height = image.size
# 一行放3张图
item_width = int(width / 3)
box_list = []
for i in range(0, 3):
for j in range(0, 3):
box = (j * item_width, i * item_width, (j + 1) * item_width, (i + 1) * item_width)
box_list.append(box)
image_list = [image.crop(box) for box in box_list]
return image_list
# 保存图片
def save_images(image_list):
index = 1
for image in image_list:
image.save(‘e:\\图片\\’+str(index) + ‘.png’, ‘PNG’)
index += 1
if __name__ == ‘__main__’:
file_path = “e:\\图片\\龙猫.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还可以做很多有趣的图像处理,大家可以玩起来!