opencv で 鮮鋭化

鮮鋭化 / アンシャープマスキング を行います。

チュートリアルには登場しないし、専用の関数も無いのですが、cvFilter2D で、kernel にマイナスを使用して適用することで実現するようです。

filter2D

使用するカーネル

0, −1, 0 −1, 5, −1, 0, −1, 0

−1, −1, −1 −1, 9, −1, −1, −1, −1

などです。

結果

f:id:pongsuke:20180327143435p:plainオリジナル

f:id:pongsuke:20180327143438p:plain4近傍

f:id:pongsuke:20180327143441p:plain8近傍

#!/usr/bin/env python
# -*- coding: utf-8 -*
import sys 
import cv2 
import numpy as np

def main():
    # BGR
    image = cv2.imread('img/um.02.png')

    cv2.namedWindow("original")
    cv2.moveWindow("original", 200, 200)
    cv2.imshow('original', image)

    kernel = np.array([[-1,-1,-1], [-1,9,-1], [-1,-1,-1]], np.float32)
    #kernel = np.array([[0,-1,0], [-1,5,-1], [0,-1,0]], np.float32)
    print(kernel)

    dst = cv2.filter2D(image, -1, kernel)

    cv2.namedWindow("result")
    cv2.moveWindow("result", 200, 400)
    cv2.imshow('result', dst)
    cv2.imwrite('img/um.k9.png', dst)

    cv2.waitKey(0)
    cv2.destroyAllWindows()
    return 0

if __name__ == '__main__':
    try:
        main()
    except KeyboardInterrupt:
        pass