지난번에는 이미지를 여러 개의 그리드로 나누는 것을 해보았다.

이번에는 전체 그림을 모자이크 처리하여 색상을 단순화하고 각 부분의 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가 역순으로 되어야 한다.

1
pixel_values[width*730+520#y와 x 순서
cs

결과는 (215, 159, 66)

이 값을 검색해보니 

이런 결과가 나왔다. 구글 참 좋다 ㅎㅎㅎ

내가 정확히 원했던 그 색깔이 나왔다.

다음 번에는 추출된 색깔을 RGB 값으로 실행 창에 나타나도록 해봐야겠다.

계속 찾아봤지만... 도대체 왜 없는지 모르겠다... 구글에 일일이 쳐보기도 번거로운데 방법을 어서 알아냈으면 좋겠다...

+ Recent posts