[영상처리] 모자이크 처리하기 (OpenCV-Python)
모자이크 처리
영상에서 특정 영역을 작게 축소했다가 다시 확대하면 원래의 픽셀과 비슷하긴 하지만, 보간법에 의해서 연산한 결과로 선명도가 떨어져 뿌옇게 보인다. 보간법 알고리즘으로 cv2.INTER_AREA를 사용하면 아래의 코드 예시에서처럼 저해상도 픽셀처럼 된다.
코드
opencv에서 제공하는 cv2.selectROI() 함수로 ROI를 쉽게 선택할 수 있다. 이후 해당 부분을 축소, 확대하여 선명도가 깨지는 부분으로 변경한다.
import cv2
rate = 15
title = 'mosaic'
img = cv2.imread('imgs/taekwonv1.jpg')
while True:
# 마우스 드래그로 ROI 선택
x, y, w, h = cv2.selectROI(title, img, False)
if w and h:
roi = img[y:y+h, x:x+w]
# 축소
roi = cv2.resize(roi, (w//rate, h//rate))
# INTER_AREA 방식으로 확대
roi = cv2.resize(roi, (w, h), interpolation=cv2.INTER_AREA)
img[y:y+h, x:x+w] = roi
cv2.imshow(title, img)
else:
break
cv2.destroyAllWindows()
결과 영상
왼쪽 영상의 얼굴을 드래그하여 ROI를 선택하면, 오른쪽처럼 모자이크 처리가 된다.
참고자료
[도서] 파이썬으로 만드는 OpenCV 프로젝트