在 Python 中实现照片马赛克


照片马赛克是一种技术,我们可以将图像分割成一个正方形网格。每个正方形将被其他图像或颜色替换。因此,当我们想从一定距离观看实际图像时,我们可以看到实际图像,但如果我们走近,我们可以看到不同颜色块的网格。

在本例中,我们使用了一个名为 photomosaic 的 Python 模块。使用此模块,我们可以轻松创建一些照片马赛克。要安装它,请访问此链接。它还会下载**scikit learn**模块。

sudo pip3 install photomosaic

此模块具有一些功能。这些功能列在下面:

  • 在这里,我们可以使用不同大小的图块。
  • 我们可以为图像的细节部分设置更小的图块。
  • 使用 Flickr API 获取大量可作为图块使用的图像。

在本文中,我们将了解如何以非常简单的方式为此模块实现照片马赛克。

我们使用 skimage 库中的一个图像。

主图像

Main Output

创建照片马赛克的步骤

  • 获取实际图像(此处为 skimage 库中的图像)
  • 定义网格图块大小
  • 提供一个位置来创建彩色 RGB 图像块作为池
  • 将文件夹设置为照片马赛克的池
  • 使用池和网格大小转换为照片马赛克。
  • 保存图像
  • 退出

示例代码

from skimage.io import *
import sys
import photomosaic asphmos
from skimage import data
image = data.coffee() #Get coffee image from skimage
#Get the mosaic size from the command line argument.
mos_size = (int(sys.argv[1]), int(sys.argv[2]))
#create all image squares and generate pool
phmos.rainbow_of_squares('square/')
square_pool = phmos.make_pool('square/*.png')
#Create the mosaic image and save
mosaic = phmos.basic_mosaic(image, square_pool, mos_size)
imsave('mosaic_op.png', mosaic)

输出(第一次运行,网格大小为 100 x 100)

$ python3 225.Photomosaic.py 100 100
5832it [00:02, 2506.05it/s]
analyzing pool: 100%|| 5832/5832 [00:08<00:00, 717.90it/s]
/usr/local/lib/python3.6/dist-packages/skimage/transform/_warps.py:105: UserWarning: The default mode, 'constant', will be changed to 'reflect' in skimage 0.15.
warn("The default mode, 'constant', will be changed to 'reflect' in "
/usr/local/lib/python3.6/dist-packages/skimage/transform/_warps.py:110: UserWarning: Anti-aliasing will be enabled by default in skimage 0.15 to avoid aliasing artifacts when down-sampling images.
warn("Anti-aliasing will be enabled by default in skimage 0.15 to "
partitioning: depth 0: 100%|| 10000/10000 [00:00<00:00, 852292.94it/s]
analyzing tiles: 100%|| 10000/10000 [00:00<00:00, 93084.50it/s]
matching: 100%|| 10000/10000 [00:00<00:00, 30864.50it/s]
drawing mosaic: 100%|| 10000/10000 [00:00<00:00, 13227.12it/s]
/usr/local/lib/python3.6/dist-packages/skimage/util/dtype.py:141: UserWarning: Possible precision loss when converting from float64 to uint8
.format(dtypeobj_in, dtypeobj_out))
First Run

输出(第二次运行,网格大小为 500 x 500)

$ python3 225.Photomosaic.py 500 500
5832it [00:02, 2634.16it/s]
analyzing pool: 100%|| 5832/5832 [00:08<00:00, 709.54it/s]
/usr/local/lib/python3.6/dist-packages/skimage/transform/_warps.py:105: UserWarning: The default mode, 'constant', will be changed to 'reflect' in skimage 0.15.
warn("The default mode, 'constant', will be changed to 'reflect' in "
/usr/local/lib/python3.6/dist-packages/skimage/transform/_warps.py:110: UserWarning: Anti-aliasing will be enabled by default in skimage 0.15 to avoid aliasing artifacts when down-sampling images.
warn("Anti-aliasing will be enabled by default in skimage 0.15 to "
partitioning: depth 0: 100%|| 250000/250000 [00:00<00:00, 456159.45it/s]
analyzing tiles: 100%|| 250000/250000 [00:02<00:00, 113937.01it/s]
matching: 100%|| 250000/250000 [00:07<00:00, 32591.43it/s]
drawing mosaic: 100%|| 250000/250000 [00:02<00:00, 104349.90it/s]
/usr/local/lib/python3.6/dist-packages/skimage/util/dtype.py:141: UserWarning: Possible precision loss when converting from float64 to uint8
.format(dtypeobj_in, dtypeobj_out))
Second Run

更新于: 2019-07-30

577 次浏览

启动您的 职业生涯

通过完成课程获得认证

开始
广告