[OpenCV4.5.0]モザイク処理を試す

元画像

一部分を切り抜いて、縮小する

縮小した部分を拡大する

-> モザイクがかかったように見える(ドットを縮小して拡大したため)

これをプログラムで書く。
mosaic.py

import cv2

def mosaic(img, rect, size): # rectはモザイクをかける領域
	(x1, y1, x2, y2) = rect 
	w = x2 - x1 # width
	h = y2 - y1 # height
	i_rect = img[y1:y2, x1:x2]

	i_small = cv2.resize(i_rect, (size, size)) # 対象領域を指定したサイズに縮小
	i_mos = cv2.resize(i_small, (w, h), interpolation=cv2.INTER_AREA) # 対象領域に拡大
	img2 = img.copy()
	img2[y1:y2, x1:x2] = i_mos # 埋め込み
	return img2

app.py

import cv2
from mosaic import mosaic as mosaic

img = cv2.imread("cat.jpeg")
mos = mosaic(img, (50, 50, 400, 400), 10)

cv2.imwrite("cat-mosaic.png", mos)

なんやこれ、めっちゃ面白いな。
mosaic(img, rect, size): のsizeの値を小さくすると、モザイクが荒くなります。