Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

파이썬에서 포토모자이크 구현하기

<시간/>

포토모자이크는 이미지를 정사각형 격자로 분할할 수 있는 기술입니다. 각 사각형은 다른 이미지나 색상으로 대체됩니다. 그래서 특정 거리에서 실제 이미지를 보고 싶을 때는 실제 이미지를 볼 수 있지만 가까이 다가가면 서로 다른 색상의 블록 격자를 볼 수 있습니다.

이 경우 우리는 photomosaic이라는 Python 모듈을 사용하고 있습니다. 이 모듈을 사용하여 포토모자이크를 쉽게 만들 수 있습니다. 설치하려면 이 링크를 따르십시오. cikit Learn도 다운로드됩니다. 모듈.

sudo pip3 install photomosaic

이 모듈에는 몇 가지 기능이 있습니다. 아래에 나열되어 있습니다 -

  • 여기서 다양한 크기의 타일을 사용할 수 있습니다.
  • 이미지의 세부적인 부분에 대해 더 작은 타일을 설정할 수 있습니다.
  • 플리커 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))
<중앙> 파이썬에서 포토모자이크 구현하기