Python-OpenCVで補完方法を指定して画像を縮小

python コンピュータ
python

画像を補完方法を指定して1/2に縮小してみます。

オリジナル

INTER_LINEAR(デフォルト)
LINEAR

INTER_AREA
AREA

INTER_CUBIC
CUBIC

INTER_NEAREST
NEAREST

INTER_LANCZOS4
LANCZOS4

オリジナルが白黒の網掛け状になっている部分がINTER_NEAREST以外は中間色の灰色になっていますが、INTER_NEARESTは白になってしまいました。

INTER_CUBICとINTER_LANCZOS4では斜め黒線に白の縁取りのような物が見えます。

INTER_LINEARとINTER_AREAの場合、これといって特徴のない縮小結果になりました。

スクリプト

#!/usr/bin/env python3
# coding: utf8

import cv2
import numpy as np

h = 600
w = 800

canvas = np.zeros((h,w), dtype=np.uint8)

for x in range(h):
    for y in range(w):
        xx = x % 2
        yy = y % 2
        if (xx == 1 and yy == 0) or (xx == 0 and yy == 1):
            canvas[x,y] = 0
        else:
            canvas[x,y] = 255
        
        if (x == y):
            canvas[x,y] = 0
        
        if (x == 100):
            canvas[x,y] = 0
        
        if (y == 100):
            canvas[x,y] = 0


cv2.imwrite('origin.png', canvas)

linear = cv2.resize(canvas, dsize=(int(w/2),int(h/2)), interpolation=cv2.INTER_LINEAR)
cv2.imwrite('inter_linear.png', linear)

area = cv2.resize(canvas, dsize=(int(w/2),int(h/2)), interpolation=cv2.INTER_AREA)
cv2.imwrite('inter_area.png', area)

cubic = cv2.resize(canvas, dsize=(int(w/2),int(h/2)), interpolation=cv2.INTER_CUBIC)
cv2.imwrite('inter_cubic.png', cubic)

nearest = cv2.resize(canvas, dsize=(int(w/2),int(h/2)), interpolation=cv2.INTER_NEAREST)
cv2.imwrite('inter_nearest.png', nearest)

lanczos4 = cv2.resize(canvas, dsize=(int(w/2),int(h/2)), interpolation=cv2.INTER_LANCZOS4)
cv2.imwrite('inter_lanczos4.png', lanczos4)

コメント