Python 사진 모자이크 처리 OpenCV 예제

파이썬 OpenCV를 사용해 사진을 모자이크 처리하는 방법을 알아보겠습니다.

모자이크 처리는 사진 전체를 할 수도 있도 원하는 위치를 모자이크 처리할 수도 있습니다.

또는 얼굴을 인식하는 처리와 함께 사용해 얼굴만 모자이크 처리를 할 수도 있습니다.

이번에는 사진 전체 또는 사진 일부분만 모자이크 처리하는 방법을 알아보겠습니다.

먼저 사진을 준비하겠습니다.

 

샘플 이미지

 

모자이크 처리를 하기 위해서 특별히 복잡한 알고리즘을 사용해 처리할 필요는 없습니다.

사진을 축소했다가 다시 확대하고, 다시 원래 사이즈로 변경하기만 하면 됩니다.

import cv2

src = cv2.imread('C:/Users/Administrator/Desktop/python/origin/face.jpg')
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('C:/Users/Administrator/Desktop/python/origin/face_mosaic_01.jpg', dst_01)

dst_005 = mosaic(src, ratio=0.05)

cv2.imwrite('C:/Users/Administrator/Desktop/python/origin/face_mosaic_005.jpg', dst_005)

 

사진을 축소하기 위해 사용한 cv2.resize()에는 두 번째 인수에 축소 후 사이즈를 지정하지 않고 None을 설정합니다.

대신 배율을 지정하는 인수 fx와 fy를 사용합니다.

그리고 다시 확대를 하는 처리에서는 2번째 인수에 사진의 원래 사이즈를 지정합니다.

사진을 축소할 때와 확대할 때에는 사진을 리사이즈 하지 않도록 interpolation에 cv2.INTER_NEAREST를 설정합니다.

 

▶ ratio=0.1 결과

 

▶ ratio=0.05 결과

ratio 변수에 대입한 배율을 변경해 원하는 형태로 모자이크를 만들 수 있습니다.

 

이번에는 사진 일부분만 모자이크 하는 방법을 알아보겠습니다.

import cv2

src = cv2.imread('C:/Users/Administrator/Desktop/python/origin/face.jpg')
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)

def mosaic_area(src, x, y, width, height, ratio=0.1):
    dst = src.copy()
    dst[y:y + height, x:x + width] = mosaic(dst[y:y + height, x:x + width], ratio)
    return dst

dst_area = mosaic_area(src, 270, 130, 150, 60)

cv2.imwrite('C:/Users/Administrator/Desktop/python/origin/face_mosaic_area.jpg', dst_area)

 

mosaic_area라는 함수를 추가해 모자이크를 처리할 위치와 크기를 설정하도록 했습니다.

 src – 사진 정보

 x – 가로 시작 위치

 y – 세로 시작 위치

 width – 모자이크 넓이

 height – 모자이크 높이

 ratio – 모자이크 배율

 

▶ 부분 모자이크 결과

mosaic_area 함수에 전달하는 인수 값을 변경해 원하는 위치에 모자이크를 설정할 수 있습니다.

댓글