😏Mosaic

λͺ¨μžμ΄ν¬ 처리

μ‚¬μ§„μ˜ νŠΉμ •μ˜μ—­μ„ 마우슀둜 μ„ νƒν•˜λ©΄ κ·Έ μ˜μ—­μ„ λͺ¨μžμ΄ν¬ μ²˜λ¦¬ν•©λ‹ˆλ‹€.

원리

νŠΉμ • μ˜μ—­μ„ μž‘κ²Œ μΆ•μ†Œν–ˆλ‹€κ°€ λ‹€μ‹œ ν™•λŒ€ν•˜λ©΄ μ›λž˜μ˜ ν”½μ…€κ³Ό λΉ„μŠ·ν•˜κΈ΄ ν•˜μ§€λ§Œ, 보간법에 μ˜ν•΄μ„œ μ—°μ‚°ν•œ κ²°κ³ΌλΌμ„œ μ„ λͺ…도가 λ–¨μ–΄μ Έ λΏŒμ˜‡κ²Œ λ³΄μž…λ‹ˆλ‹€.
보간법 μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œλŠ” cv2.INTER_AREA λ₯Ό μ‚¬μš©ν•˜λ©΄ 저해상도 ν”½μ…€ 처럼 λ©λ‹ˆλ‹€.

import cv2

rate = 15               # λͺ¨μžμ΄ν¬μ— μ‚¬μš©ν•  μΆ•μ†Œ λΉ„μœ¨ (1/rate)
win_title = 'mosaic'    # μ°½ 제λͺ©
img = cv2.imread('../img/taekwonv1.jpg')    # 이미지 읽기

while True:
    x,y,w,h = cv2.selectROI(win_title, img, False) # κ΄€μ‹¬μ˜μ—­ 선택
    if w and h:
        roi = img[y:y+h, x:x+w]   # κ΄€μ‹¬μ˜μ—­ μ§€μ •
        roi = cv2.resize(roi, (w//rate, h//rate)) # 1/rate λΉ„μœ¨λ‘œ μΆ•μ†Œ
        # μ›λž˜ 크기둜 ν™•λŒ€
        roi = cv2.resize(roi, (w,h), interpolation=cv2.INTER_AREA)  
        img[y:y+h, x:x+w] = roi   # 원본 이미지에 적용
        cv2.imshow(win_title, img)
    else:
        break
cv2.destroyAllWindows()