利用图片相似度实现千图成像

前言

偶然看到营销号视频利用ps实现马赛克效果的图片,利用大量胡歌的图片实现出一张胡歌的照片,效果如下

因最近在了解图片相关的技术,仔细分析了一下,将图片切割成n多个小图片,然后再去找和这些小图片相似的贴进去,这样不就成了吗?理论存在,实践开始~

分析过程

一张图片要变成马赛克照片,实际上就是将图片切割成n份,每一份的去搜索相似的图片颜色相近,结构相近的,然后替换即可,以下我利用超级偶像张国荣来演示

当图片分隔到一定小的情况下,我们只需要取颜色相同,结构大概的图片去替换掉那一小块图片即可

颜色值相近算法有 颜色直方图``rgb均值等,结构相同的有 orb``ahash``dhash等  (算法来自google搜索)

尝试一遍 过后,直方图对比速度较慢,orb对于一些小的结构变化不大的图片无法对比

所以目前选用了 rbg均值``ahash,选用ahash也是因为他速度快

rgb均值算法

np.array([
    np.mean(piece[:, :, 0]), 
    np.mean(piece[:, :, 1]), 
    np.mean(piece[:, :, 2])
])
复制代码

ahash

img = Image.open(file).convert('RGB').resize((mini_image_w, mini_image_h),Image.ANTIALIAS)
image = np.array(img.convert('L').resize((8, 8), Image.ANTIALIAS))
width, height = image.shape
avg = image.mean()
return np.array([1 if image[i, j] > avg else 0 for i in range(width) for j in range(height)])
复制代码

为什么要选用两种算法?是因为提供准确率,利用rbg均值 取出色值最相同的n张图片,然后再利用 ahash取出最相同的一张,这样大大提高的图片相似度

实现过程

千图成像实现过程需要大量的背景图片,这可难不到python,爬虫学得好~ 牢饭吃到饱

以下提供爬取豆瓣张国荣图片的代码,仅供学习参考

利用xpath和request 爬取照片

# -*- utf-8 -*-
import requests
from lxml import etree

url = "https://movie.douban.com/celebrity/1003494/photos/?type=C&start=%s&sortby=like&size=a&subtype=a"
headers = {
    'User-Agent':'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1',
    'referer':'https://movie.douban.com/celebrity/1003494/photos/?type=C&start=30&sortby=like&size=a&subtype=a'
}
for i in range(20):
    print('第%d页' % i)
    html = etree.HTML(requests.get(url % (i * 30), headers=headers).content.decode())
    img_links = html.xpath('//*[@class="cover"]/a/img/@src')
    for img_link in img_links:
        body = requests.get(img_link, headers=headers).content
        with open('./bg-1/' + img_link.split('/')[-1].split('.')[0] + '.jpg', 'wb') as f:
            f.write(body)
复制代码

图片合成代码

1.首先将背景图的平均色值和hash值都利用字段保存好,方便接下来更快的的计算

2.将图片切换成小图片进行

3.获取每一小块里面最相同的图片贴进去

实现效果

代码传送门

合成代码已经上传github,开箱即用,如果可以顺便点个star

github.com/stars1324/m…

如有问题请联系:1105504520@qq.com

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享