티스토리 뷰

반응형
[영상처리] 모자이크 처리하기 (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 프로젝트

반응형
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday