在 Python 中实现照片马赛克
照片马赛克是一种技术,我们可以将图像分割成一个正方形网格。每个正方形将被其他图像或颜色替换。因此,当我们想从一定距离观看实际图像时,我们可以看到实际图像,但如果我们走近,我们可以看到不同颜色块的网格。
在本例中,我们使用了一个名为 photomosaic 的 Python 模块。使用此模块,我们可以轻松创建一些照片马赛克。要安装它,请访问此链接。它还会下载**scikit learn**模块。
sudo pip3 install photomosaic
此模块具有一些功能。这些功能列在下面:
- 在这里,我们可以使用不同大小的图块。
- 我们可以为图像的细节部分设置更小的图块。
- 使用 Flickr API 获取大量可作为图块使用的图像。
在本文中,我们将了解如何以非常简单的方式为此模块实现照片马赛克。
我们使用 skimage 库中的一个图像。
主图像
创建照片马赛克的步骤
- 获取实际图像(此处为 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))
输出(第二次运行,网格大小为 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))
广告