前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >用Python生成马赛克画

用Python生成马赛克画

作者头像
sergiojune
发布于 2019-09-25 03:18:06
发布于 2019-09-25 03:18:06
1K00
代码可运行
举报
文章被收录于专栏:日常学python日常学python
运行总次数:0
代码可运行

大家知道马赛克画是什么吗?不是动作片里的马赛克哦~~ 马赛克画是一张由小图拼成的大图,本文的封面就是我们的效果图,放大看细节,每一块都是一张独立的图片,拼在一起组成一张大图,感觉像是用马赛克拼出来的画,所以叫马赛克画。看到网上的一些马赛克画觉得很酷,于是自己用Python实现了一下将一张原图转换成马赛克画。

我们的效果图是这样的

原图是这样的

实现的具体思路是这样

第一步:首先收集一组图片,这些图片会作为大图中的小方格图片。图片越多,最后生成的图片颜色越接近。

第二步:将要转换的图片分割成一个一个小方格图片,像下面这样

第三步:对于每一个小方格图片,取图片集里面最接近的图片替换。所有小方格都替换后,就生成了我们最终的马赛克画。

听上去是不是很简单?

我们来看一下具体的实现步骤,下面是一些核心代码。完整代码可在公众号后台回复“mosaic”获取。

我们的图片集存在images目录下,下面的代码加载目录下所有的图片,并缩放成统一的尺寸

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import re
import os
import cv2
import numpy as np
from tqdm import tqdm

IMG_DIR = "images"

def load_all_images(tile_row, tile_col):
    img_dir = IMG_DIR
    filenames = os.listdir(img_dir)
    result = []
    print(len(filenames))
    for filename in tqdm(filenames):
        if not re.search(".jpg", filename, re.I):
            continue
        try:
            filepath = os.path.join(img_dir, filename)
            im = cv2.imread(filepath)
            row = im.shape[0]
            col = im.shape[1]
            im = resize(im, tile_row, tile_col)
            result.append(np.array(im))
        except Exception as e:
            msg = "error with {} - {}".format(filepath, str(e))
            print(msg)
    return np.array(result, dtype=np.uint8)

这里load_all_images函数的参数就是统一后的尺寸,tile_row和tile_col分别对应高和宽。

下面的代码对要转换的图片进行分割

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
img = cv2.imread(infile)
tile_row, tile_col = get_tile_row_col(img.shape)
for row in range(0, img_shape[0], tile_row):
    for col in range(0, img_shape[1], tile_col):
        roi = img[row:row+tile_row,col:col+tile_col,:]

我们将要转换的图片分割成一个个小方格,tile_row和tile_col是小方格的高和宽,roi存取小方格中的图片数据。

下面是计算两张图片相似度的函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from scipy.spatial.distance import euclidean
def img_distance(im1, im2):
    if im1.shape != im2.shape:
        msg = "shapes are different {} {}".format(im1.shape, im2.shape)
        raise Exception(msg)
    array1 = im1.flatten()
    array2 = im2.flatten()
    dist = euclidean(array1, array2)
    return dist

im1和im2是两张图片的数据,图片数据是一个三维的numpy数组,这里我们将三维数组转换成一维数组后,比较两者的欧式距离。之后要找出最相似的图片,只需遍历图片集中所有的图片,找到距离最短的那张图片,去替换原图中的小方格就可以了。

我们再来看一下最终实现的效果

放大图中局部的细节如下

如果对图片的画质不满意,想要更精细的画质,可以考虑在分割的时候把图片分割成更小的方格,不过这样也会增加程序运行的时间。

生成图片的过程比较耗时,考虑到性能原因,原程序中使用多进程的方式并行处理。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-09-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 日常学python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
用深度神经网络搭建马赛克神器,高清无码效果感人
相信一提起马赛克这个东西,不少小伙伴都痛心疾首,虽然最近几年也频繁传出有在研发去除马赛克的软件,一直没有成品问世。不过最近一位程序员及经过不断努力终于完成了这款软件。
不脱发的程序猿
2021/01/20
9890
python+OpenCV 特征点检测
Harris角点检测算法是一个极为简单的角点检测算法,该算法在1988年就被发明了,算法的主要思想是如果像素周围显示存在多于一个方向的边,我们认为该点为兴趣点。基本原理是根据公式:
流川疯
2019/01/18
1.4K0
美翻你的朋友圈,Python生成蒙太奇马赛克图片
我们有时候会听到这么一个词--“蒙太奇”,但却不知道这个词是什么意思。蒙太奇原为建筑学术语,意为构成、装配。而后又延伸为一种剪辑理论:当不同镜头拼接在一起时,往往又会产生各个镜头单独存在时所不具有的特定含义。这就是我们经常听到了蒙太奇手法,在电影《飞屋环游记》中皮克斯运用蒙太奇手法,用一个不到5分钟的短片展现了主角的大半人生,感动无数观众。下面我们就看看今天的内容同蒙太奇有何关系。
ZackSock
2020/05/18
9940
美翻你的朋友圈,Python生成蒙太奇马赛克图片
基于 Go 协程实现图片马赛克应用(上):同步版本
介绍完 Go 并发编程基础和常见并发模式的实现后,我们来看一个完整的项目 —— 基于 Go 语言实现照片马赛克功能,为了对比并发与非并发的性能差异,我们先通过同步代码实现这个功能。
学院君
2020/10/19
1K0
基于 Go 协程实现图片马赛克应用(上):同步版本
什么是马赛克图片?如果用Python把21057张图片合成一张,会是什么样的
说是女儿从出生到现在,所有的照片,大概有上百张,所以想使用这些照片合成一张,当做生日礼物
松鼠爱吃饼干
2022/01/04
7910
什么是马赛克图片?如果用Python把21057张图片合成一张,会是什么样的
python 马赛克-像素图
刚好最近搞numpy的数据处理,还有各种格式的数据转换,发现使用各种库,其实都是在做各种数据的转换,挺有意思的。
叶子陪你玩
2021/12/21
1K0
python 马赛克-像素图
[Python图像处理] 二十.图像量化处理和采样处理及局部马赛克特效
前面一篇文章我讲解了基于K-Means聚类的图像分割或量化处理,但突然发现市场上讲解图像量化和采样代码的文章很缺乏,因此结合2015年自己的一篇 文章 及相关知识,分享一篇Python图像量化及处理的博文供同学们学习。基础性文章,希望对你有所帮助。
Eastmount
2023/09/01
1.1K0
[Python图像处理] 二十.图像量化处理和采样处理及局部马赛克特效
使用Depix进行马赛克的消除测试
最近看到各种公众号都在推一个叫Depix的Github项目,用途是能够消除文字马赛克,抱着试试看的态度测试了一下这个项目。
全栈程序员站长
2022/09/12
6.6K0
使用Depix进行马赛克的消除测试
Depix马赛克_马赛克是什么意思啊
笔者本来只是翻了翻微信的公众号,突然发现很多公众号都提高了一个叫做Depix的项目,据说是马赛克的克星,于是好奇的到Github上下载了试试效果,公众号推送相关消息如下: 最近,一个名为 Depix 的 GitHub 项目爆火,上线三天 star 量已经高达 6.9k。项目作者 Sipke Mellema 是一名信息安全顾问。
全栈程序员站长
2022/08/03
7850
Depix马赛克_马赛克是什么意思啊
基于 Go 协程实现图片马赛克应用(下):并发重构
在之前同步版本的应用中,对于示例图片的马赛克处理,需要几秒时间才能完成,我们可以通过并发编程来提升这个性能。
学院君
2020/10/19
7670
基于 Go 协程实现图片马赛克应用(下):并发重构
[Python还能干嘛]微信好友头像完成马赛克拼图~
何谓马赛克拼图,简单来说就是将若干小图片平凑成为一张大图,如下图路飞一样,如果放大看你会发现里面都是一些海贼王里面的图片。
Awesome_Tang
2019/07/01
1.5K0
[Python还能干嘛]微信好友头像完成马赛克拼图~
鸿蒙开发实战案例:图片编辑实现马赛克效果
本示例将原图手指划过的区域分割成若干个大小一致的小方格,然后获取每个小方格中的像素点的平均色彩数值,使用获取到的平均色彩数值替换该方格中所有的像素点。最后使用createPixelMapSync接口将新的像素点数据写入图片,即可实现原始图片的局部马赛克处理。
小帅聊鸿蒙
2025/02/22
720
鸿蒙开发实战案例:图片编辑实现马赛克效果
iOS多边形马赛克的实现(上)
马赛克(英语:Mosaic)是镶嵌艺术的音译,原本是指一种装饰艺术,通常使用许多小石块或有色玻璃碎片拼成图案,在教堂中的玻璃艺品,又称为花窗玻璃(stained glass)。后来该词(马赛克)泛指这种类型五彩斑斓的视觉效果。 在计算机图形学里,马赛克技术(日语:モザイク処理,英语:Pixelization)是一种利用与镶嵌画装饰艺术类似原理的影像处理方法,在香港又称打格仔。此方法将影像特定区域的色阶细节劣化并造成色块打乱的效果,其目的是为了使另一个人无法辨认,同时用在影像处理时有时也称为码赛克、打码(由单
天天P图攻城狮
2018/02/02
4.1K3
iOS多边形马赛克的实现(上)
python中imread什么意思_imwrite函数
最近一直在用python做图像处理相关的东西,被各种imread函数搞得很头疼,因此今天决定将这些imread总结一下,以免以后因此犯些愚蠢的错误。如果你正好也对此感到困惑可以看下这篇总结。当然,要了解具体的细节,还是应该 read the fuck code和API document,但貌似python的很多模块文档都不是很全,所以只能多看代码和注释了。
全栈程序员站长
2022/11/04
1.1K0
R可视乎|创建乐高版马赛克图
今日内容比较“无用”,觉得比较好玩,所以就做一期“异类”可视化啦!主要介绍下 brickr[1] 包,它将乐高(LEGO) 带入 R 和 tidyverse 生态系统中,该包分为2个部分:
庄闪闪
2021/09/14
7090
PHP实现图片马赛克效果
对图片中选定区域的每一像素,增加若干宽度及高度,来生成矩型。而每一像素的矩型重叠在一起,就形成了马赛克效果。本例使用GD库的imagecolorat获取像素颜色,使用imagefilledrectangle画矩型。
用户7657330
2020/08/14
6050
three.js 将图片马赛克化
这篇郭先生来说说BufferGeometry,类型化数组和粒子系统的使用,并且让图片有马赛克效果(同理可以让不清晰的图片清晰化),如图所示。在线案例点击图片马赛克。
郭先生的博客
2020/08/31
2.7K0
three.js 将图片马赛克化
谁能驾驭马赛克?微软AI打码手艺 VS 谷歌AI解码绝活儿
上个月底,微软研究院推出一套基于AI 技术的视频人脸模糊解决方案,通俗讲就是为人脸自动打码。而在今日,谷歌发布了模糊图片转高清图片的解决方案,说白了就是去除马赛克的技术。 你说谷歌,人家微软刚整出一套自动打码手艺,你就来个自动解码绝活。不少人有个疑问,那么谷歌是否能解除微软打的马赛克,上演一番科技版“用我的矛戳你的洞”?我们先来看下双方的技术原理是怎么样。 一、微软自动打码手艺 根据微软亚洲研究院副研究员谢文轩介绍,操作这套解决方案,用户只需在后台用鼠标选择想要打码的人物,相应人物在视频中的所有露脸区域
AI科技评论
2018/03/09
2.4K0
谁能驾驭马赛克?微软AI打码手艺 VS 谷歌AI解码绝活儿
Python 图像处理实用指南:1~5
顾名思义,图像处理可以简单地定义为在计算机中(通过代码)使用算法对图像进行处理(分析和操作)。它有几个不同的方面,如图像的存储、表示、信息提取、操作、增强、恢复和解释。在本章中,我们将对图像处理的所有这些不同方面进行基本介绍,并介绍使用 Python 库进行的实际图像处理。本书中的所有代码示例都将使用 Python 3。
ApacheCN_飞龙
2023/04/27
5.6K0
Python 图像处理实用指南:1~5
jquery酷炫的马赛克图片还原动画代码
jquery酷炫的马赛克图片还原动画代码,jquery马赛克图片动画,js酷炫图片代码,马赛克图片js还原效果,js图片分散汇聚效果素材
博客趣
2024/01/08
2670
jquery酷炫的马赛克图片还原动画代码
推荐阅读
相关推荐
用深度神经网络搭建马赛克神器,高清无码效果感人
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验