OpenCV で濃淡をはっきりさせる

OpenCV で濃淡をはっきりさせるために、「ぼかしを引く」という操作をする。元画像に「ぼかし」を混ぜると輪郭が曖昧になるが、逆に「ぼかし」を引くと輪郭を強調できる。コードはぼかしの記事とほぼ同じ。パラメータ v を負の値に設定して画像を編集する。

import cv2
import sys
import numpy as np

# 画像を加工する                                                                         
def mkimg(img):
    img2 = b(img,20,-0.8)
    return img2

# ぼかす                                                                                 
def b(img1,i=4,v=1.):
    img2 = cv2.blur(img,(i,i))
    img1f = np.float32(img1)
    img2f = np.float32(img2)
    return ct(img1f * (1. - v) + img2f * v)

# 値を0-255にclipして、typeをuint8にする                                                 
def ct(img):
    return np.clip(img,0,255).astype(np.uint8)

file_name = sys.argv[1]
img = cv2.imread(file_name)
img2 = mkimg(img)

cv2.imwrite(file_name.replace(".",".out."),img2)
元画像:都立水元公園の木々
濃淡強調画像: 広さi = 20 比率 v = -0.8

濃淡を強調すると、画像は硬く、はっきりとした印象になる。のっぺりとした部分はザラザラし、ノイズが強調されることもある。

元画像:滝の中に見えた虹
濃淡強調画像: 広さi = 3000 比率 v = -2.0

パラメータを極端な値にすると、印象が強くなる。上記画像では、広さi = 3000 比率 v = -2.0 とした。

コメント

タイトルとURLをコピーしました