美文网首页
opencv简单的锐化与反锐化实现

opencv简单的锐化与反锐化实现

作者: zjam9333 | 来源:发表于2020-08-17 18:09 被阅读0次

锐化

使用unsharp mask的原理:
结果 = (a * 原图) + (b * 原图的高斯模糊),其中a >= 1 && b <= 0 && a + b == 1
用opencv的GaussianBluraddWeighted即可

def someblur(src, blursize = 5):
    # dst = cv2.blur(src, (blursize, blursize))
    dst = cv2.GaussianBlur(src, (blursize, blursize), 1)
    return dst

def sharpen(src):
    blur = someblur(src, 5)
    dst = cv2.addWeighted(src, 2, blur, -1, 0)
    return dst
原图

那么对上图做锐化操作:

img = cv2.imread('resource/messi.jpg')
imgsharp = sharpen(img)
锐化结果 imgsharp

反锐化

有时锐化的效果太过了,想要减弱一些:
结果 = (a * 原图) + (b * 原图的高斯模糊),其中 0 <= a <= 1 && 0 <= b <= 1 && a + b == 1

def desharpen(src):
    blur = someblur(src, 5)
    dst = cv2.addWeighted(src, 0.5, blur, 0.5, 0)
    return dst

对上图的锐化结果进行操作:

imgdesharp = desharpen(imgsharp)

得到的图与最开始的原图很相似,但不可能完全一样,因为高斯模糊本身就不可逆。

反锐化结果 imgdesharp

以下为全部代码:

from cv2 import cv2
import numpy as np 

def someblur(src, blursize = 5):
    # dst = cv2.blur(src, (blursize, blursize))
    dst = cv2.GaussianBlur(src, (blursize, blursize), 1)
    return dst

def sharpen(src):
    blur = someblur(src, 5)
    dst = cv2.addWeighted(src, 2, blur, -1, 0)
    return dst

def desharpen(src):
    blur = someblur(src, 5)
    dst = cv2.addWeighted(src, 0.5, blur, 0.5, 0)
    return dst

img = cv2.imread('resource/messi.jpg')
# blur = someblur(img)
imgsharp = sharpen(img)
imgdesharp = desharpen(imgsharp)

cv2.imshow('origin', img)
# cv2.imshow('blur', imgblur)
cv2.imshow('sharp', imgsharp)
cv2.imshow('desharp', imgdesharp)

相关文章

网友评论

      本文标题:opencv简单的锐化与反锐化实现

      本文链接:https://www.haomeiwen.com/subject/vjwqjktx.html