Photomosaic là một kỹ thuật, nơi chúng ta có thể chia ảnh của mình thành lưới các ô vuông. Mỗi ô vuông sẽ được thay thế bởi một số hình ảnh hoặc màu khác. Vì vậy khi chúng ta muốn xem ảnh thực tế từ một khoảng cách nhất định, chúng ta có thể thấy ảnh thực tế, nhưng nếu chúng ta đến gần hơn, chúng ta có thể thấy lưới các khối màu khác nhau.
Trong trường hợp này chúng ta đang sử dụng một module Python gọi là photomosaic. Sử dụng module này, chúng ta có thể dễ dàng tạo một số photomosaics. Để cài đặt nó vui lòng làm theo liên kết này. Nó cũng sẽ tải xuống module scikit learn.
sudo pip3 install photomosaic
Module này có một số tính năng. Chúng được liệt kê dưới đây:
- Ở đây chúng ta có thể sử dụng kích thước ô (tile) khác nhau.
- Chúng ta có thể đặt ô nhỏ hơn cho phần chi tiết của một ảnh.
- Sử dụng flicker api để lấy bộ sưu tập lớn hình ảnh để dùng làm ô.
Trong bài viết này, chúng ta sẽ xem cách triển khai module này cho photomosaics theo một cách rất đơn giản.
Chúng ta đang sử dụng một ảnh từ thư viện skimage.
Ảnh chính

Các bước tạo photomosaic
- Lấy ảnh thực tế (ở đây ảnh từ thư viện skimage)
- Định nghĩa kích thước ô lưới
- Cung cấp vị trí để tạo các khối ảnh RGB nhiều màu làm pool
- Đặt thư mục làm Pool cho photomosaic
- Chuyển thành photomosaic sử dụng pool và kích thước lưới.
- Lưu ảnh
- Thoát
Mã ví dụ
from skimage.io import *
import sys
import photomosaic as phmos
from skimage import data
image = data.coffee() # Lấy ảnh coffee từ skimage
# Lấy kích thước mosaic từ đối số dòng lệnh
mos_size = (int(sys.argv[1]), int(sys.argv[2]))
# Tạo tất cả các ô vuông ảnh và tạo pool
phmos.rainbow_of_squares('square/')
square_pool = phmos.make_pool('square/*.png')
# Tạo ảnh mosaic và lưu
mosaic = phmos.basic_mosaic(image, square_pool, mos_size)
imsave('mosaic_op.png', mosaic)
Đầu ra (Lần chạy đầu, Kích thước lưới 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] ... 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]

Đầu ra (Lần chạy thứ hai, Kích thước lưới 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] ... 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]
