지난번에는 이미지를 여러 개의 그리드로 나누는 것을 해보았다.
이번에는 전체 그림을 모자이크 처리하여 색상을 단순화하고 각 부분의 RGB 값을 알 수 있도록 하는 것을 해보도록 하자. 포뇨아빠라는 블로그의 내용을 참고하여 연습했다.
아래와 같이 opencv를 다운받고 모자이크 처리할 이미지를 지정한다.
1
2
3
4
5
6
7
8
9
10
11
|
!pip install opencv-python #opencv를 우선 다운로드 받아야 한다.
import cv2
src = cv2.imread('/파일경로명') #모자이크 처리할 이미지
def mosaic(src, ratio=0.1):
small = cv2.resize(src, None, fx=ratio, fy=ratio, interpolation=cv2.INTER_NEAREST)
return cv2.resize(small, src.shape[:2][::-1], interpolation=cv2.INTER_NEAREST)
dst_01 = mosaic(src)
cv2.imwrite('/파일경로명', dst_01), dst_01) #저장할 파일명
|
cs |
이렇게 하니 다음과 같은 그림이 나온다.

나는 좀 더 단순화해야해서 아래와 같이 비율을 달리해봤다.
1
2
3
4
|
dst_005= mosaic(src, ratio=0.05)
cv2.imwrite('/파일경로명', dst_005), dst_005) #저장할 파일명
dst_002= mosaic(src, ratio=0.02)
cv2.imwrite('/파일경로명', dst_002), dst_002) #저장할 파일명
|
cs |

0.05

0.02
훨씬 더 단순화되어가는 것을 볼 수 있다.

0.001
비율을 더 작게 하니 형태를 알아볼 수 없을 정도가 되었다.
크게 단순화된 것을 확인할 수 있었다.
다음으로는 위에서 0.001로 처리된 이미지의 픽셀 크기를 확인하고 RGB 값을 추출해내고 싶었다.
이건 PIL(Python Image Library)을 이용해서 처리할 수 있었다.
1
2
3
4
5
|
from PIL import Image
im = Image.open('/파일경로명.jpg', 'r') #픽셀 크기를 확인할 이미지
width, height = im.size
pixel_values = list(im.getdata())
im.size
|
cs |
(740, 845) 이라는 결과가 나왔다.
즉 x픽셀이 740, y픽셀이 845라는 뜻이다.
원래는 아래 이미지가 왼쪽에 흰 선이 하나가 더 있었다. 그래서 색깔 그리드로 구분했을 때 가로축이 6칸, 세로축이 7칸이었다. 나는 가로축 4번째 세로축 6번째 궁금해서 각 픽셀을 그리드의 값으로 나눈 뒤에 어림잡아서 10정도를 값을 빼서 아래의 코드에 넣어봤다.

아래에 있는 순서는 x와 y가 역순으로 되어야 한다.

이런 결과가 나왔다. 구글 참 좋다 ㅎㅎㅎ
내가 정확히 원했던 그 색깔이 나왔다.
다음 번에는 추출된 색깔을 RGB 값으로 실행 창에 나타나도록 해봐야겠다.
계속 찾아봤지만... 도대체 왜 없는지 모르겠다... 구글에 일일이 쳐보기도 번거로운데 방법을 어서 알아냈으면 좋겠다...
'코딩 > 파이썬 코딩 실전연습' 카테고리의 다른 글
[예술작품 딥러닝 #1] 파이썬 셀레니움으로 구글 사진 크롤링 (0) | 2021.08.03 |
---|---|
영상처리_Crop_이미지 분할하기_unicodeescape_error (0) | 2020.09.29 |