转载AI Studio项目链接https://aistudio.baidu.com/aistudio/projectdetail/3499631?forkThirdPart=1
用照片比个心:情人节用库存照片拼出爱心秀炸朋友圈
友情链接:【情人节限定】朋友圈撒狗粮神器
一年一度的情人节即将来到,有对象的人手机里想必都存了很多充满纪念的照片。为了更有新意的撒(sha)狗(ren)粮(le),纯粹发出一张九宫格已经不能满足我们的诉求。不用慌,通过以下内容可以快捷将手机里的狗粮照片重排,实现出花样的朋友圈撒狗粮。
样例展示
左边是模板图片(来自于百度图片搜索),中间是使用27×27张新垣结衣的搜索图片近似的图片,右边是近似图片分割而成的九宫格图片。这样就可以在朋友圈快乐地展示出自己与对象了~
使用方法
选择模板图片(如比心的手势等),选择一批图片(需要总图片数量大于指定的用于拟合的图片数量,如想用27×27张图片拟合目标图片,最好具有多于27×27张图片以获得较好的拟合结果),修改以下参数为自己想要的值即可运行获得最后的结果(保存在9_save文件夹下)。
pic_base_num 图片的行数
pic_size 每张小图片的尺寸
templet_dir 模板图片
imgs_dir 用于拟合的图片文件夹
output_dir 输出的图片路径名称
没有女朋友也没关系,下面的代码中包含了一个爬虫函数,可以自动根据关键词从百度图片获取海量图片
如果实在没有这么多图片,可以将图片复制几次或者去除py_files.myfunctions代码中的del命令
代码介绍
- py_files.search_on_baidu 根据关键词获取百度图片的搜索结果
- py_files.myfunctions 包含三个函数,分别具有功能:将图片进行centercrop(裁剪为正方形图片),获取两个三通道图片的差异值,将库存图片拟合模板图片
- py_files.make_9_blocks 将图片划分为九宫格
上述代码参考了:
https://blog.csdn.net/weixin_42845306/article/details/112789419
https://blog.csdn.net/qq_37124237/article/details/80931894
https://aistudio.baidu.com/aistudio/projectdetail/3472196
代码示例
# 获取1000张新垣结衣的图片,并且将所有的图片进行centercrop
from py_files.search_on_baidu import *
from py_files.myfunctions import *
import os
# 随机获取需要的图片并且处理为正方形
search_pic_on_baidu('新垣结衣', 1000, 'pics')
for img in os.listdir('pics'):
make_center_square('pics/'+img)
百度图片找到相关图片约117,000张
错误,当前图片无法下载
处理完毕,共耗时:525.2224822044373秒
# 获取两张图片的'距离'
from py_files.search_on_baidu import *
from py_files.myfunctions import *
img_dir1='pics/0.jpg'
img_dir2='pics/1.jpg'
img1=cv2.imread(img_dir1)
img2=cv2.imread(img_dir2)
pic_size=64
get_distance_of_2_pics(img1,img2,pic_size=pic_size)
64.51257657604776
# 拟合模板图片,非常耗时,几乎需要pic_base_num*pic_base_num秒
from py_files.myfunctions import *
import cv2
import os
pic_base_num=9*3
pic_size=64
templet_dir='templet.jpg'
imgs_dir='pics'
output_dir='result.jpg'
imgs2img(pic_base_num,pic_size,templet_dir,imgs_dir,output_dir)
# 将图片分割为9块用于发朋友圈~
! rm -rf 9_save
! mkdir 9_save
from py_files.make_9_blocks import *
output_dir='result.jpg'
image = Image.open(output_dir)
image = fill_image(image)
image_list = cut_image(image)
save_images(image_list,'9_save')